Java 8、TestNg 6.8.1、Mockito 1.10.19。
这是我第一次使用 Mockito。我在一个类中 stub 了两个方法,它们都接受一个 String 和一个 double 作为参数并返回 double。在这种情况下我只关心第二个参数。
当在执行单元测试期间调用 stub 方法时, stub 只能正常工作一次。对 stub 方法的后续调用返回 0,而不是增加/减少参数。我将此解释为好像这些方法不再被 stub 。
这是代码
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));
以下是在 ClassBeingTested
中调用方法 1
和 方法 2
的方法:
method2(someString, method1(someString, someDouble));
我想知道我做错了什么。据我了解, stub 方法可以重复调用,并且它们应该重复返回“thenReturn()”方法中提供的值。
提前感谢所有可以提供帮助的人..
最佳答案
解决这个难题所需的关键(我在问题的原始版本中错过了这一点,现在我根据论坛成员的建议进行了编辑)是我在 classBeingTested.getSomeDoubleValue(someString, someDouble)
中调用 stub 方法的方式。这就是相关调用的样子 method2(someString, method1(someString, someDouble));
。你可能马上就能看出我的错误。
方法 1 收到值 someDouble
,而方法 2 收到方法 1 返回的 someDouble - 0.5d
。这就是 Mockito 无法识别 method2 的 stub 并且该方法返回 0.0d
的原因。
我不得不重写我原来的“ mock ”
when(myManagerMock.method1(someString, someDouble)).thenReturn(someDouble + 0.5d);
when(myManagerMock.method2(someString, someDouble)).thenReturn(someDouble - 0.5d);
并使其看起来像这样,以便实际参数值不再重要
当(myManagerMock.method1(anyString(),anyDouble())).thenReturn(11.5d);
当(myManagerMock.method2(anyString(),anyDouble())).thenReturn(10.5d);
之后一切正常。我还不得不放弃“thenReturn”方法中的“智能”处理。
关于java - 首次调用 stub 方法后,Mockito stub 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28860924/