在 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 检查总是会失败,因为与模拟有交互。