mockito部分parmaters嘲笑

时间:2016-08-28 20:00:28

标签: java unit-testing mockito matcher

我正在尝试在java中编写单元测试。以下是我的代码片段

类Temp {        public void method(){

       return someObject.someMethod(param1, param2, param3, param4, param5);
   }
}

测试方法:

@Test
public void testMethod() {

     Mokito.when(someObjectMock.someMethod(Mockito.anyString(), Mockito.anyString(), Mockito.anyInt(), Mockito.anyBoolean(),
                    false)). thenReturn(true);

     boolean status = temp.method();

     Assert.assertEquals(true, status);
}

在执行测试用例时,我遇到了以下错误:

 Invalid Use of argument matchers !
 5 matchers expected, 4 recorded

如果我的理解是正确的,它期望传递的所有参数都被模拟。然而,这不是我想要的,我希望模拟前4个参数,并基于5参数(true或false),然后指定适当的方法返回值。

有办法解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:2)

您需要使用Matchers.eq(false)(或Mockito.eq(false),两个地方都公开相同的静态方法)而不是普通false用于最后一个参数。

也就是说,考虑将您的存根(when()调用)中的所有匹配器保留为any(),而不是期望值。这里有两种情况:要么你的测试实际上关心什么值传递给模拟,在这种情况下你需要verify()调用(因为错过的模拟期望不是Mockito中的错误),或者你的测试不关心,在这种情况下,期望特定值只会使您的测试变得脆弱。无论哪种方式,除非你需要根据不同的参数值从存根中返回不同的值,否则在存根时期望特定参数没有任何值。