我是使用Spring启动的mockito中的新手。我的问题是,我使用mockito作为下面的mockito。
@Autowired
private AnotherService anotherService;
@MockBean
private SchedulerService schedulerService;
@Test
public void test() {
NpMesaj npMesaj = new NpMesaj("npMesaj");
when(schedulerService.schedule(any(NpMesaj.class))).thenThrow(new RuntimeException("Error"));
try {
anotherService.start(npMesaj);
} catch (Exception e) {
}
Optional<NpMesaj> npMesajFromDb = repository.findById(npMesaj.getId());
assertThat("A_Err", npMesajFromDb.isPresent(), is(false));
}
SchedulerService用于anotherService.start方法。它在这个测试范围内被嘲笑,我的断言效果很好。 在这个测试之后,我执行下面的另一个单元测试类并且它不起作用。它不包括任何模拟bean或方法。
// Unit Test-2
@Autowired
private DiffService diffService;
@Test
public void test_2(){
int diff = diffService.startDiffProcess();
assertThat("A_Err", diff, is(0));
}
此测试方法的startDiffProcess方法调用也调用其中的anotherService.start方法,如下所示:
@Autowired
private AnotherService anotherService;
public int startDiffProcess(){
anotherService.start();
return 0;
}
在上面的第一个测试中,我提到了AnotherService使用SchedulerService。当我调试Unit-test-2时,AnotherService中的SchedulerService被视为带有MockInterceptor的mockitoMock,无法执行实际方法。
可能是什么原因?为什么模拟方法调用无法重置? 感谢。
答案 0 :(得分:0)
这是我自己没有经历的奇怪行为。这些测试类是否在同一个包中?
无论哪种方式,在第一次测试中,您可以将类标记为@DirtiesContext,以确保从上下文缓存中删除该测试中使用的Spring应用程序上下文。这应该可以防止在另一个测试类中加载相同的上下文。