gpt4 book ai didi

java - 使用mockbean后无法调用真正的方法

转载 作者:行者123 更新时间:2023-12-02 12:05:43 25 4
gpt4 key购买 nike

我是使用 Spring boot 的mockito新手。我的问题是,我将mockito与mockbean一起使用,如下所示。

   @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 方法中使用。它在这个测试范围内被 mock ,我的断言效果很好。在此测试之后,执行了我的另一个单元测试类,如下所示,但它不起作用。它不包含任何模拟 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,并且无法执行真正的方法。

这可能是什么原因?为什么模拟方法调用无法重置?谢谢。

最佳答案

这确实是一种奇怪的行为,我自己没有经历过。这些测试类是否在同一个包中?

无论哪种方式,在第一个测试中,您都可以将该类标记为@DirtiesContext,以确保从上下文缓存中删除该测试中使用的 Spring 应用程序上下文。这应该可以防止在另一个测试类中加载相同的上下文。

关于java - 使用mockbean后无法调用真正的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46920837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com