[英]Reset Spring-Boot During Integration Tests
我想是想让一个极端的案例在这里工作。 在我当前的项目中,大约有20个集成测试。 一种新的集成测试需要@EnableAsync
来使测试工作:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public class MyITest {
:
}
单独运行时,此测试可以正常运行。
考虑到Maven和Eclipse在一个项目中执行测试,并且知道该环境仅创建一次并为所有集成测试重新使用(或软重置),因此一定要先运行此集成测试。 但是,(几乎?)从来没有这样。
因此,此集成测试(几乎?)总是失败。 一种显而易见的解决方案是将@EnableAsync
添加到所有集成测试中。 但是,这是一个不好的依赖关系,我敢打赌,一旦有人添加了另一个集成测试并忘记了这一要求,我就会打破这种依赖关系。
我正在寻找一种方法来强制SpringRunner
完全重置上下文,并通过查看@EnableAsync
真正从头开始。 理想情况下,该方式还包括在测试之后标记SpringRunner
也必须重置上下文(即,删除@EnableAsync
)。 这样,任何执行顺序都将确保只有一个测试具有@EnableAsync
。
有没有办法做到这一点? 还是可以通过@Before
/ @After
方法中的代码手动打开/关闭异步材料?
谁啊,我想我是偶然发现的……我现在拥有的是:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = {
ClassWithAnAutowiredAsyncDependency.class // <=== difference!!! ===>
})
public class MyITest {
:
@Autowired
private ClassWithAnAutowiredAsyncDependency mine;
:
}
似乎是给定的类被重置(特别是?),或者至少自动装配又在那儿发生了。 我无法解释任何不同。
我确定该集成测试不是正在运行的第一个集成测试,并且异步位似乎仍然存在。
好吧,测试是绿色的,它可以工作...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.