是否可以更改从模拟对象返回的值?
下面是一个解释我想要做的事情的例子.
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创建测试?
乔纳坦是对的。如果obj不是一个复杂的对象,您可以避免模拟它并使用真实的对象。
如果由于某种原因这是不可能的,mockito 允许定义一系列答案,例如:when(obj.getValue()).thenReturn("value").thenReturn("modifiedValue");这可能是您正在寻找的答案。
虽然这可能有点矫枉过正,但为了确保一切顺利,我verify(obj).setValue("changedValue");也会verify(obj, times(2)).getValue();
| 归档时间: |
|
| 查看次数: |
16457 次 |
| 最近记录: |