我有一个我想存根的方法,但它有很多参数。我怎样才能避免模拟所有参数但仍然存根方法。
前任:
//Method to stub
public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, .....endless list of parameters..);
我有一个我想存根的方法,但它有很多参数。我怎样才能避免模拟所有参数但仍然存根方法。
前任:
//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)));
创建一个包装类,它调用真正的方法并填充所有参数,但您提供的参数除外(也称为“委托”)。
并且在下一次机会中,针对项目提交一个错误,要求将参数移动到配置对象。