Java 8,TestNg 6.8.1,Mockito 1.10.19。
这是我与Mockito的第一次经历。我在一个类中存根两个方法,它们都接受一个String和一个double作为参数并返回double。在这种情况下我只关心第二个参数。
在执行单元测试期间调用存根方法时,存根只能工作一次。对stubbed方法的后续调用返回0而不是增加/减少参数。我将其理解为方法不再存在。
这是代码
MyManager myManagerMock = mock(MyManager.class);
when(myManagerMock.method1(someString, someDouble)).thenReturn(someDouble + 0.5d);
when(myManagerMock.method2(someString, someDouble)).thenReturn(someDouble - 0.5d);
// the class ClassBeingTested has a private member of the type MyManager
ClassBeingTested classBeingTested = new ClassBeingTested(myManager);
// the method getSomeDoubleValue() will perform several calls myManagerMock.method1 and myManagerMock.method2
assertThat(classBeingTested.getSomeDoubleValue(someString, someDouble), is(anExpectedDoubleValue));
以下是在method 1
内调用method2
和ClassBeingTested
的方式:
method2(someString, method1(someString, someDouble));
我想知道我做错了什么。据我所知,可以重复调用存根方法,并且它们应该重复返回“thenReturn()”方法中提供的值。
提前感谢所有可以提供帮助的人..
答案 0 :(得分:1)
解决这个难题所需的关键(我在问题的原始版本中错过了这个,我现在根据一个论坛成员的建议编辑了)是我在classBeingTested.getSomeDoubleValue(someString, someDouble)
内调用存根方法的方式。这就是有问题的电话看起来像method2(someString, method1(someString, someDouble));
的方式。你可能马上就能看出我的错误。
method1收到值someDouble
,而method2收到method1返回的someDouble - 0.5d
。这就是为什么Mockito没有认识到方法2的存根并且方法返回0.0d
的原因。
我不得不改写原来的“嘲弄”
when(myManagerMock.method1(someString, someDouble)).thenReturn(someDouble + 0.5d);
when(myManagerMock.method2(someString, someDouble)).thenReturn(someDouble - 0.5d);
并使其看起来如此,以便实际参数值不再重要
when(myManagerMock.method1(anyString(), anyDouble())).thenReturn(11.5d);
when(myManagerMock.method2(anyString(), anyDouble())).thenReturn(10.5d);
之后一切正常。我还不得不放弃“thenReturn”方法中的“智能”处理。
答案 1 :(得分:0)
您必须修改thenReturn部分才能返回多个值。像 -
这样的东西.thenReturn(someDouble + 0.5d,someDouble + 0.5d,..);
Mokito希望我们提供返回值,因为在测试用例执行期间调用stubbed方法的次数很多。试试这个,它应该工作正常。