Mockitoに問題があります。
そのようなことをすることは可能ですか?
ClassX x = mock(ClassX.class)
when(x.methodB()).thenReturn("toto");
String result = x.methodA();
私はMockito1.7を使用しています。
「スパイ」システムがあるのを見ましたが、テストするアイテムにそれを使用することは推奨されていないと言われています(なぜですか?)。
とにかくそのスパイ機能を試しましたが、奇妙な動作をします。
私がやりたいことを確認してください:
実際のコード:
String methodA(String arg) {
return this.methodB(arg);
}
String methodB(String arg) {
return "toto";
}
テストコード:
@Test
public void testTest() {
final ClassX x = spy( new ClassX() );
final String argument = "arg";
doReturn("good").when(helper).methodB(argument);
assertTrue( x.methodB(argument).equals("good") );
assertTrue( x.methodA(argument).equals("good") );
}
彼らが言ったように、私はスパイで問題になる可能性のあるwhen thenReturn構文を避けました(しかし、それはとにかく機能しません)
奇妙なことに、assertTrue(x.methodB(argument).equals( "good")); 大丈夫です
2番目のassertTrue(x.methodA(argument).equals( "good"));のみ OKではありません
実際、helper.methodA(argument)は「toto」を返します->模擬結果ではなく実際の結果
この場合、mockitoに「good」を返すように指示することはできません??? テストクラスがmethodBを呼び出した場合は問題ないようですが、スパイのメソッドがmethodBを呼び出した場合、それは機能しなくなります...
どうしたらよいかわかりません...同じクラスの2つのメソッドを単体テストし、テストを互いに独立させて、有名な模擬テストフレームワークがこの基本機能を実装しないようにするのは、とても奇妙なことです。 ?それは私たちが単に実際のユニットテストと呼んでいるものではありませんか?テストされたオブジェクトでスパイメソッドを使用しないように彼らが言う理由を理解していない...
ありがとう