【发布时间】:2018-07-20 00:20:15
【问题描述】:
如何使用 Junit5 和 Spring Boot 在每次测试执行后清除应用程序上下文?我希望在测试中创建的所有 bean 在执行后都被销毁,因为我在多个测试中创建了相同的 bean。我不希望所有测试都使用一个配置类,而是每个测试都有一个配置类,如下所示。
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = MyTest.ContextConfiguration.class)
public class MyTest{
...
public static class ContextConfiguration {
// beans defined here...
}
}
输入@DirtiesContext(classMode = BEFORE_CLASS) 不适用于 Junit5。
【问题讨论】:
-
你试过
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) -
它不起作用。 @pvpkiran
-
试试这个解决方案Dirties Context
-
为什么? bean 应该是单例并且不应该保持状态。单例性质是每个应用程序上下文(即每个
classes与@ContextConfiguration的组合)。每次都尝试重新创建它们会减慢您的测试速度(Spring 将缓存测试之间的上下文,并在相同的测试出现时重新使用它)。 -
对于初学者,您的
MyTest.ContextConfiguration类必须使用@Configuration进行注释,才能将其视为包含@Bean方法的配置类。
标签: spring junit spring-test applicationcontext junit5