在集成测试期间重置Spring-Boot

时间:2017-05-29 11:56:57

标签: spring-boot integration-testing reset

我想我正试图在这里工作。在我目前的项目中,大约有20个集成测试。一个新的集成测试需要@EnableAsync才能使测试工作:

@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public class MyITest {
  :
}

单独运行时,此测试工作正常。

考虑到Maven和Eclipse在一个项目中执行测试并且知道环境仅为所有集成测试创建一次并重用(或软重置),这有点要求此集成测试首先运行。然而,那(几乎?)绝不是这样。

因此,这种集成测试(几乎?)总是失败。一个明显的解决方案是将@EnableAsync添加到所有集成测试中。然而,这是一个糟糕的依赖,我打赌一旦有人添加了另一个集成测试并忘记了这个要求就会被打破。

我正在寻找一种方法来强制SpringRunner完全重置上下文,并真正从头开始查看@EnableAsync。理想情况下,这种方式包括标记SpringRunner必须在测试后重置上下文(即,删除@EnableAsync)。这样,任何执行顺序都可以确保只有一个测试具有@EnableAsync

有办法做到这一点吗?或者我可以通过@Before / @After方法中的代码手动打开/关闭异步内容吗?

2 个答案:

答案 0 :(得分:0)

看看DirtiesContext

不确定这是否是您正在寻找的。

可能重复:How do you reset Spring JUnit application context after a test class dirties it?

答案 1 :(得分:0)

哇,我想我偶然发现了......我现在拥有的东西:

@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = {
    ClassWithAnAutowiredAsyncDependency.class // <=== difference!!! ===>
})
public class MyITest {
:
  @Autowired
  private ClassWithAnAutowiredAsyncDependency mine;
:
}

好像给定的类被重置(特别是?)或者至少在那里再次发生自动装配。我无法解释它。

我确信这个集成测试不是第一个正在运行的集成测试,但异步位似乎仍然存在。

嗯,测试是绿色的,它有效......