web-dev-qa-db-ja.com

Mockito:すべてのパラメーターをモックせずにメソッドを簡単にスタブする方法

スタブしたいメソッドがありますが、パラメーターがたくさんあります。すべてのパラメーターのモックを回避しながら、メソッドをスタブするにはどうすればよいですか?.

例:

//Method to stub
public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, .....endless list of parameters..);
23
Michael Bavin

Mockitoを使用しているときに、どのような問題が発生しているのかはわかりません。 myMethod()メソッドを含むインターフェースのモックを作成すると仮定すると、関心のあるメソッドへのパラメーターのみを検証できます。たとえば、(インターフェースがMyInterfaceであると仮定して) JUnit 4を使用):

_@Test
public void test() {
    MyInterface myInterface = mock(MyInterface.class);
    FooBar expectedFooBar = new FooBar();        

    // other testing stuff

    verify(myInterface).myMethod(any(), any(), eq(expectedFooBar), any(), ...);
}
_

これを機能させるには、Mockitoメソッドで静的インポートを実行する必要があります。 any()マッチャーは、検証時に渡された値を気にしません。

メソッドのすべての引数に何かを渡すことを避けることはできません(たとえそれがNULLであっても)。

26
SteveD

mockito.anyを使用

myobj mymethodが文字列、文字列、バーなどを受け入れる場合

通話をスタブする

Mockito.when(myojb.myMethod(Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)))
    .thenReturn(amockedobject);

steveDがすでに答えを出したことを確認する

Mockito.verify(myojb).myMethod(
    Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)));

実際のメソッドを呼び出して、指定したものを除くすべての引数を埋めるラッパークラスを作成します(「委任」とも呼ばれます)。

そして、次の機会に、パラメーターを構成オブジェクトに移動するように依頼するプロジェクトに対してバグを提出します。

3
Aaron Digulla