私はテストのないレガシーアプリケーションを扱わなければなりません。したがって、リファクタリングを開始する前に、すべてがそのまま動作することを確認したいと思います。Mockitoは「欲しいですが呼び出されませんでした」と言っていますが、デバッグテストはそのメソッドにジャンプします
ここで、次のような状況を想像してみてください。
public SomeObject doSomething(final OtherObject x, final String something) {
if(x != null) {
final String = someOtherMethod(x, something);
}
}
protected String someOtherMethod(final OtherObject x, final String something) {
....
}
は今、私は保護されたメソッドが
としても呼ばれていることを確認するだから私はこの@InjectMocks // Yes there is more going on here
private MyTestObject myTestObject;
private MyTestObject spy;
private static final OtherObject VALID_OTHER_OBJECT = new OtherObject();
@Before
public void setup() {
this.spy = Mockito.spy(myTestObject);
}
@Test
public void ifOtherObjectIsNotNullExpectSubMethodToBeCalled() {
myTestObject.doSomething(VALID_OTHER_OBJECT, null);
verify(spy).someOtherMethod(VALID_OTHER_OBJECT, null);
}
をした私は失敗のテストを取得します「呼び出されましたが呼び出されません...」とsomeOtherMethod()
。 私はすぐにデバッグモードに入り、チェックしました。そのメソッドは呼び出されます!
この原因は何ですか?私はここでスパイを悪用していますか?
編集:私はこれがあなたが典型的にテストするものではないことを知っていることを知っています。特にsomeOtherMethod(...)
には戻り値がありません。しかし、戻り値がvoid
だったと想像してください。
基本的に私はここでスパイが失敗する理由を理解したいと思います。
ディープコピーですか? – Sorona
@Soronaドキュメントでは指定されていませんが、ソースのクイックチェックではnoと表示されます。浅いコピーのみ。 – Douglas