大まかに言えば、単体テストはホワイト ボックス テストである必要があり、統合テストはブラック ボックス テストである必要があります。
つまり、単体テストはコード単位 (通常はメソッド) の内部動作に依存する必要があります。開発者は、メソッドを介して可能な実行パスを調べ、それぞれのテスト ケースを作成します。単体テストでは、メソッドを分離してテストする必要もあります。テスト対象のメソッドのみが単体テストによって実行されるように、共同作業者または入力と出力をモックする必要があります。
if
実行パスを見つけるには、メソッドへの可能な入力と、そこにある分岐 (ステートメントや例外など)について考える必要があります。例えば
public boolean isYes() {
return someValue.equals("yes");
}
このメソッドにはif
ステートメントはありませんが、3 つの実行パスがあります。
someValue
である場合"yes"
、メソッドは戻りますtrue
- 、、、またはそれが返す
someValue
ような他の文字列である場合"Yes"
"no"
"bananas"
""
false
someValue
それがnull
スローされる場合NullPointerException
この場合、これらの実行パスについて考え、それらのケースをカバーする単体テストを作成すると、メソッドにどのような問題があるかを考えるのに役立ちます。
実行パスがコードのいくつかのユニットを訪問するテストは、統合テストになります。全体的な入力と出力に関してテストを実行します。それがどのように機能するかは気にしません。それが機能することだけです。
個人的には、コード ベースに関する独自の知識に基づいて単体テストを作成し、メソッドごとに個別に作成します。要件からの仕様と個々の受け入れ基準に基づいて統合テストを作成します。