java - Mockito 允许设置模拟返回值

标签 java mockito

是否可以更改从模拟对象返回的值?

下面是一个解释我正在尝试做的事情的例子。

public class MyClass{
  public void method(Mock obj){
    if(obj.getValue.equals("value"){
      obj.setValue("changedValue");
    }

    anotherObj.call(obj.getValue());
  }

所以上面的类非常简化。如果传入的值等于值,它将更改返回的值。

@Test
public void test(){
  Mock obj = mock(Mock.class);
  when(obj.getValue()).thenReturn("value");

  testClass.method(obj);

  verify(anotherObj, times(1)).call("changedValue");
}

测试想要验证 anotherObj.call 是否使用更改后的值调用,但由于我们已将返回值模拟为“值”,因此将失败,因为返回了“值”。

是否可以使用模拟的 returnValue 创建测试?

最佳答案

乔纳坦是对的。如果 obj 不是一个复杂的对象,您可以避免模拟它并使用真实的对象。

如果由于某种原因这是不可能的,mockito 允许定义一系列答案,例如:when(obj.getValue()).thenReturn("value").thenReturn("modifiedValue"); 这可能是您正在寻找的内容。

虽然这可能有点矫枉过正,但为了确保一切正常,我还会 verify(obj).setValue("changedValue");verify(obj, times( 2)).getValue();

关于java - Mockito 允许设置模拟返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18868338/

相关文章:

java - 如何在 Spring 中模拟 ModelMapper?

Java UDP 服务器,并发客户端

Java:在数组列表中查找最接近特定负数的值

java - Prolog 图可视化

java - Mockito 不是 stub 该方法,而是调用该方法

java - 在 servlet 过滤器中模拟私有(private)字段

java - 如何编写junit mockito测试用例

java - 如何使用netty打开连接,并立即将数据发送到我连接的主机?

java - 使用 Aggregator 测试 Metrics.Counter 值的方法

kotlin - 用 Mockito 在 Kotlin 中模拟队列似乎不起作用