Mockito:如何在不模仿所有参数的情况下轻松存根方法

Mic*_*vin 22 java unit-testing mocking mockito stubbing

我有一个方法我想要存根但它有很多参数.我怎样才能避免模拟所有参数但仍然存根方法.

例如:

//Method to stub
public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, .....endless list of parameters..);
Run Code Online (Sandbox Code Playgroud)

Ste*_*veD 27

我不太关注你使用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(), ...);
}
Run Code Online (Sandbox Code Playgroud)

您需要对Mockito方法进行静态导入才能使其正常工作.该any()匹配不关心验证时已通过什么样的价值.

你不能避免为你的方法中的每个参数传递一些东西(即使它只是NULL).

  • 我猜他真的很想调用myMethod(),所以他每次都需要传递所有这些参数,这会使测试肿。 (2认同)

Lui*_*osa 10

使用mockito.any

如果myobj mymethod接受字符串,字符串,条形码等

打断电话

Mockito.when(myojb.myMethod(Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)))
    .thenReturn(amockedobject);
Run Code Online (Sandbox Code Playgroud)

验证SteveD已经给出了答案

Mockito.verify(myojb).myMethod(
    Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)));
Run Code Online (Sandbox Code Playgroud)