Mockito允许设置模拟的返回值

wel*_*l_i 6 java mockito

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

下面是一个解释我想要做的事情的例子.

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

    anotherObj.call(obj.getValue());
  }
Run Code Online (Sandbox Code Playgroud)

所以上面的课程非常简单.如果传入的值等于value,它将更改返回的值.

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

  testClass.method(obj);

  verify(anotherObj, times(1)).call("changedValue");
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mor*_*fic 3

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

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

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