是否可以更改从模拟对象返回的值?
下面是一个解释我正在尝试做的事情的例子。
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/