1

次のクラスがあり、method2 と method3 をモックした method1 をテストしました。* method2 呼び出しが OK の場合 ==> OK * method2 が NotFoundException をスローし、method3 が OK を返す場合 ==> OK * method2 が NotFoundException をスローし、method3 が ServiceException をスローする場合 ==> ServiceException が実際にスローされる

method1 の機能だけをテストするために、メソッド method2 と method3 をモックしてもよろしいですか? また、method2 と method3 に個別のテストを追加したので、それらが完全に機能していることがわかります。

class ClassUnderTest {

public void method1() {
  try {
    method2();
  } catch (NotFoundException e) {
    method3()
  }
}

public void method2() throws NotFoundException {
  ...
}

public void method3() throws ServiceException {
  ...
}

}
4

2 に答える 2

1

Mockito を使用して、提案していることを実行spyできます。これにより、一部のメソッドをスタブ化できますが、他のメソッドはスタブ化できません。ただし、多くの場合、これは最善の方法ではありません。その理由はこれです。

メソッドのあらゆる種類のテストは、そのメソッドの動作をテストする必要があります-その出力は何か、その副作用は何か、入力の変動による特別な動作があるかどうか。テストは、正しい動作をしていれば、メソッドの実装が何であるかを気にする必要はありません。したがって、andをmethod1呼び出しても、そのように実装されていることはクラスの要件ではありません。したがって、 を呼び出すことをアサートするテストの代わりに、 のテストではまったく言及しないでください。 の出力および/または副作用が想定どおりであることを確認するだけです。 method2method3method1method2method1method2method1

method1これは、 のテストと のテストの間でアサーションが重複している可能性があることを意味しますがmethod2、テストが実装の変更に対して堅牢であるという事実とのバランスを取る必要があります。

于 2013-11-05T01:40:33.803 に答える
0

テストに与える粒度によって異なります。

テストケースを書きやすくするために、慣習は他のクラスのモックメソッドにすぎないかもしれませんが、場合によっては、同じクラスのメソッドのモックを書かなければならないことがあります。 method2 をモックしても問題ありません。

常に、テストをできるだけ簡単に保つようにしてください。

于 2013-11-04T18:38:06.620 に答える