5

私がモックしたオブジェクトでメソッドが呼び出されたことを確認しようとしています。

public class MyClass{
    public String someMethod(int arg){
        otherMethod();
        return "";
    }

    public void otherMethod(){ }
}    

public void testSomething(){
    MyClass myClass = Mockito.mock(MyClass.class);

    Mockito.when(myClass.someMethod(0)).thenReturn("test");

    assertEquals("test", myClass.someMethod(0));

    Mockito.verify(myClass).otherMethod(); // This would fail
}

これは私の正確なコードではありませんが、私がやろうとしていることをシミュレートしています。otherMethod()呼び出されたことを確認しようとすると、コードは失敗します。これは正しいです?このメソッドについての私の理解はverify、スタブメソッド内で呼び出されたメソッドを検出する必要があるということです(someMethod

私の質問とコードが明確であることを願っています

4

1 に答える 1

4

いいえ、Mockitoモックは、たとえばでオーバーライドしない限り、すべての呼び出しでnullを返すだけです。thenReturn()

あなたが探しているのは、@Spy例えば:

MyClass mc = new MyClass();
MyClass mySpy = Mockito.spy( mc );
...
mySpy.someMethod( 0 );
Mockito.verify( mySpy ).otherMethod();   // This should work, unless you .thenReturn() someMethod!

問題が、someMethod()実行したくないコードが含まれているが、モックされている場合は、メソッド呼び出し自体をモックする代わりに、モックを挿入します。例:

OtherClass otherClass; // whose methods all throw exceptions in test environment.

public String someMethod(int arg){
    otherClass.methodWeWantMocked();
    otherMethod();
    return "";
}

したがって

MyClass mc = new MyClass();
OtherClass oc = Mockito.mock( OtherClass.class );
mc.setOtherClass( oc );
Mockito.when( oc.methodWeWantMocked() ).thenReturn( "dummy" );

それが理にかなっていて、少しお役に立てば幸いです。

乾杯、

于 2013-02-04T08:37:36.597 に答える