在 Mockito 中测试 return 语句
Test return statement in Mockito
我有一个代码,里面有一个条件,在某些条件下什么都不做,如下所示。我想测试那个特定的场景。
被测代码,return语句:
public void someTask(){
if(somecondition){
return;
}else if(){
//more work to do
}
}
我尝试过但到目前为止失败了:
@Test
public void testSomeTask(){
when(mock.somecondition()).thenReturn(true);
mock.someTask();
verifyNoMoreInteractions(mock); //fails
verifyZeroInteractions(mock); //fails this calls the above method anyway
}
更新:条件和被测方法属于同一个class。我在监视 class 而不是嘲笑,但结果是一样的。我得到的错误是
这里不需要交互,指向我的 verifyNoMoreInteractions 行。
但是在mock上发现了这个交互,指向上面的调用。我将更改参数并强制它指向我的行并提供更新 later.I 我想我明白我的测试有什么问题了。
解决方案:
验证方法调用和所有其他调用,这些调用将作为测试参数下方法的结果调用,并验证条件本身。然后在最后验证 NomoreINteractions。不幸的是,没有办法验证 return 没有任何东西被调用;此版本 Mockito 的声明。拥有类似 verifyNothingIsDone 之类的工具会很方便,就像 doNothing().when(.....);
您似乎在尝试测试模拟实例的实现。
相反,您应该使用 spy
,并且只模拟 somecondition()
。
然后你需要验证实际交互。
verify(spy).someTask();
verify(spy).somecondition();
verifyNoMoreInteractions(spy);
verifyZeroInteractions
检查总是会失败,因为与模拟有交互。
我有一个代码,里面有一个条件,在某些条件下什么都不做,如下所示。我想测试那个特定的场景。
被测代码,return语句:
public void someTask(){
if(somecondition){
return;
}else if(){
//more work to do
}
}
我尝试过但到目前为止失败了:
@Test
public void testSomeTask(){
when(mock.somecondition()).thenReturn(true);
mock.someTask();
verifyNoMoreInteractions(mock); //fails
verifyZeroInteractions(mock); //fails this calls the above method anyway
}
更新:条件和被测方法属于同一个class。我在监视 class 而不是嘲笑,但结果是一样的。我得到的错误是 这里不需要交互,指向我的 verifyNoMoreInteractions 行。 但是在mock上发现了这个交互,指向上面的调用。我将更改参数并强制它指向我的行并提供更新 later.I 我想我明白我的测试有什么问题了。
解决方案: 验证方法调用和所有其他调用,这些调用将作为测试参数下方法的结果调用,并验证条件本身。然后在最后验证 NomoreINteractions。不幸的是,没有办法验证 return 没有任何东西被调用;此版本 Mockito 的声明。拥有类似 verifyNothingIsDone 之类的工具会很方便,就像 doNothing().when(.....);
您似乎在尝试测试模拟实例的实现。
相反,您应该使用 spy
,并且只模拟 somecondition()
。
然后你需要验证实际交互。
verify(spy).someTask();
verify(spy).somecondition();
verifyNoMoreInteractions(spy);
verifyZeroInteractions
检查总是会失败,因为与模拟有交互。