如何使用JUnit Mockito Verify检查是否未调用方法

时间:2019-04-30 16:02:40

标签: java unit-testing junit mockito

我有一个要为其编写JUnit测试的类。我正在尝试测试是否从未调用过特定方法。

np.fromiter

测试类为:

public class CountryProcess extends AbstractCountryProcess {

    private static final Logger log = LoggerFactory.getLogger(CountryProcessor.class);
    private static final Long MAX_FILE = 20l;

    @Override
    protected boolean processCountry(Region region, City city) {
        Long maxFile = region.getRequiredLongValue(SIZE);

        if (maxFile < MAX_FILE) {
            cntDao.addCountryLandMark(city);
        }
        else {
            log.warn("File size was big");
        }

        return true;
}

但这会返回以下错误:

  

org.mockito.exceptions.misusing.NotAMockException:

     

传递给verify()的参数是$ Proxy4类型的,不是模拟的!

     

确保正确放置括号!

     

查看正确验证的示例:

     

verify(mock).someMethod();

     

verify(mock,times(10))。someMethod();

     

verify(mock,atLeastOnce())。someMethod();

任何想法都可以在当前情况下解决。请举一个使用当前代码的示例,这样我会有一个更好的主意?

1 个答案:

答案 0 :(得分:2)

您正在混合两个模拟框架:

  • jMock-JUnitRuleMockery
  • Mockito-verify方法

很显然,它们彼此不兼容。 您的验证调用看起来还不错,我相信它会在收到使用Mockito创建的模拟文件后立即运行(使用Mockito.mock(CntDao.class)

作为never的替代方法,您可以使用Mockito.verifyNoMoreInteractionsMockito.verifyZeroInteractions,但是它们的含义不太明确。