java - 首次调用 stub 方法后,Mockito stub 消失

标签 java testng mockito stubbing

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/

相关文章:

java - JodaTime:用 +00:00 代替 Z 的日期时间

java - 对象类型和引用类型之间的区别

java - 如何在 ItestListener 中获取当前的类驱动程序

java - mockito "verify"检查当前状态,但不重置模拟调用

java - 同一类中的模拟方法

java - Spring boot Rest 以空主体响应异常,而不是在我的@ControllerAdvice 中覆盖的异常

java - ArrayList() 中的 get() 方法行为具有原始类型但没有类型参数

java - 如何与 Maven 安装并行运行 Maven 测试?

java - 我们可以在任何测试类中使用 testng 监听器中定义的变量吗?

java - NoClassDefFoundError : Mockito Bytebuddy