【发布时间】:2017-10-29 17:31:21
【问题描述】:
我想我想在这里找到一个极端案例。在我当前的项目中,大约有 20 个集成测试。一项新的集成测试需要@EnableAsync 才能进行测试:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public class MyITest {
:
}
单独运行时,此测试运行良好。
考虑到 Maven 和 Eclipse 在一个项目中执行测试,并且知道该环境只创建一次并为所有集成测试重用(或软重置),所以这个集成测试首先运行有点要求。然而,(几乎?)从来都不是这样。
因此,这个集成测试(几乎?)总是失败。一种明显的解决方案是将@EnableAsync 添加到所有集成测试中。但是,我敢打赌,一旦有人添加另一个集成测试并忘记了这个要求,它就会被打破。
我正在寻找一种方法来强制SpringRunner 完全重置上下文并真正从头开始,同时查看@EnableAsync。理想情况下,这种方式包括标记SpringRunner 在测试后也必须重置上下文(即删除@EnableAsync)。这样,任何执行顺序都可以确保只有一个测试具有@EnableAsync。
有没有办法做到这一点?或者我可以通过@Before/@After 方法中的代码手动打开/关闭异步内容吗?
【问题讨论】:
标签: spring-boot integration-testing reset