スタブしたいメソッドがありますが、パラメーターがたくさんあります。すべてのパラメーターのモックを回避しながら、メソッドをスタブするにはどうすればよいですか?.
例:
//Method to stub
public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, .....endless list of parameters..);
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であっても)。
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)));
実際のメソッドを呼び出して、指定したものを除くすべての引数を埋めるラッパークラスを作成します(「委任」とも呼ばれます)。
そして、次の機会に、パラメーターを構成オブジェクトに移動するように依頼するプロジェクトに対してバグを提出します。