【发布时间】:2020-01-16 18:50:41
【问题描述】:
我的集成测试中有 @SpyBean 字段的奇怪行为。 例如,我有一些集成测试:
package a;
@SpringBootTest
public class A {
@SpyBean
public MySpyBeanCandidate spyBean;
@Test
public void test1 {
// some work
Mockito.verify(spyBean, Mockito.atLeastOnce()).methodName(eq("String value"), anyString());
}
}
package a;
@SpringBootTest
public class B {
@SpyBean
public MySpyBeanCandidate spyBean;
@Test
public void test2 {
// some work
Mockito.verify(spyBean, Mockito.atLeastOnce()).methodName(eq("String value"), anyString());
}
}
问题是当我尝试单独执行它们时它们成功执行,但如果我将它们一起运行,在第二个测试中 Mockito.verify(..) 将抛出异常:Wanted but not invoked。但是我已经对其进行了调试并检查了该方法(methodName)是否正确调用。谁知道为什么会这样?
【问题讨论】:
-
很难说你没有提供足够的代码。当两者都运行时,该方法是否真的按预期调用?缺少测试设置和生产代码。
-
@DCTID,感谢您的回复! “当两者都运行时,该方法真的按预期调用了吗?”,是的,在第二种方法
spyBean中它真的是模拟的,但什么都没有发生,只是Wanted but not invoked。 “缺少测试设置和生产代码。” - 你是什么意思?这是正确的代码。 -
尝试提供minimal reproducible example。由于目前我们无法告诉您出了什么问题,因为我们无法根据您发布的代码重现此行为。
-
我的意思是缺少测试设置和生产代码,
MySpyBeanCandidate未提供。您在从事间谍活动,因此实际代码很重要。此外,您刚刚写了//some work,无论您如何称呼、模拟等spyBean。我们无法将您的代码复制粘贴到我们的 ide 中并看到与您相同的结果。 -
你有没有想过这个问题?我有同样的问题。
标签: spring spring-boot mockito spring-test spring-boot-test