我有一个要为其编写JUnit测试的类。我正在尝试测试是否从未调用过特定方法。
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;
}
测试类是:
public class CountryProcessTest {
@Rule
public final JUnitRuleMockery context = new JUnitRuleMockery();
private final CntDao cntDao = context.mock(CntDao.class);
@Before
public void setup() {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(cntDao.class).toInstance(cntDao);
}
});
}
@Test
public void shouldIgnoreIfFileSizeBiggerThanPermitted() {
//some code to make it trigger ELSE statement above...
verify(cntDao, never()).addCountryLandMark(anyString());
}
}
但这将返回以下错误:
org.mockito.exceptions.misusing.NotAMockException:
传递给verify()的参数是$ Proxy4类型的,不是模拟的!
确保正确放置括号!
请参阅正确验证的示例:
verify(mock).someMethod();
verify(mock,times(10))。someMethod();
verify(mock,atLeastOnce())。someMethod();
知道如何在当前情况下解决此问题。请举一个使用当前代码的示例,这样我有一个更好的主意?
最佳答案
您正在混合两个模拟框架:
jMock-JUnitRuleMockery
Mockito-verify
方法
显然,它们彼此不兼容。
您的验证调用看起来还不错,我相信它会在收到使用Mockito创建的模拟文件后立即运行(使用Mockito.mock(CntDao.class)
)
作为never
的替代方法,可以使用Mockito.verifyNoMoreInteractions
或Mockito.verifyZeroInteractions
,但是它们的含义不太明确。