【问题标题】:@SpyBean with few Integration tests doesn't work correctly带有少量集成测试的 @SpyBean 无法正常工作
【发布时间】: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


【解决方案1】:

@DirtiesContext 针对此类情况的每个 @Test 方法都对我有用。

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 2021-11-20
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    相关资源
    最近更新 更多