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

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

例如:

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

我不太关注你使用Mockito的问题。 假设您创建了包含myMethod()方法的接口的模拟,则可以仅validation您感兴趣的方法的参数。例如(假设接口名为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()匹配器不关心validation时传递的值。

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

使用mockito.any

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

存根电话

 Mockito.when(myojb.myMethod(Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class))) .thenReturn(amockedobject); 

validationSteveD已经给出了答案

 Mockito.verify(myojb).myMethod( Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class))); 

创建一个包装类,它调用真实方法并填充所有参数,但是你提供的参数(也就是“委托”)。

在下一次机会中,针对项目提出错误,要求将参数移动到配置对象。