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

2022-09-01 14:19:07

我有一个方法,我想存根,但它有很多参数。我怎么能避免嘲笑所有参数,但仍然存根方法。

前任:

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

答案 1

我不太了解你在使用Mockito时遇到的问题。假设您创建了包含您的方法的接口的模拟,那么您可以仅验证您感兴趣的方法的参数。例如(假设接口被调用并使用 JUnit 4):myMethod()MyInterface

@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)。


答案 2

使用 mockito.any

如果 myobj mymethod 接受字符串、字符串、bar 等

为呼叫添加存根

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)));

推荐