我有一个方法我想要存根但它有很多参数。 我怎样才能避免模拟所有参数但仍然存根方法。
例如:
//Method to stub
public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, .....endless list of parameters..);
答案 0 :(得分: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(), ...);
}
您需要对Mockito方法执行静态导入才能使其正常工作。 any()
匹配器不关心验证时传递的值。
你无法避免为方法中的每个参数传递一些东西(即使它只是NULL)。
答案 1 :(得分:10)
使用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)));
答案 2 :(得分:3)
创建一个包装类,它调用真实方法并填写所有参数,但是你提供的参数(a.k.a“delegation”)。
在下次机会中,针对项目提出错误,要求将参数移动到配置对象。