Java Spring:为什么在每个测试类结束时都不调用@PreDestroy?
我有一个集成测试类,注释如下Java Spring:为什么在每个测试类结束时都不调用@PreDestroy?,java,spring,spring-mvc,spring-junit,component-scan,Java,Spring,Spring Mvc,Spring Junit,Component Scan,我有一个集成测试类,注释如下 @WebAppConfiguration @ContextConfiguration(classes = {AppConfiguration.class}) @RunWith(SpringJUnit4ClassRunner.class) public class CacheConsumerTest { } 这是我的应用程序配置 @Configuration @ComponentScan(basePackages = {"com.etc.etc.e
@WebAppConfiguration
@ContextConfiguration(classes = {AppConfiguration.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class CacheConsumerTest {
}
这是我的应用程序配置
@Configuration
@ComponentScan(basePackages = {"com.etc.etc.etc."})
@EnableWebMvc
public class AppConfiguration {
}
出于某种原因,在CacheConsumerTest
中的所有测试结束时,没有调用我的@组件bean的@PreDestroy
<代码>@PostConstruct
将在开始时调用,然后再运行任何测试
有人知道问题出在哪里吗?我的一些@Component
是我希望关闭的后台线程(通过调用其@Predestroy),否则它们在后台执行的工作将导致其他测试类中的后续测试失败
我尝试添加@DirtiesContext(classMode=classMode.AFTER\u CLASS)
,但没有帮助
编辑:解决了这个问题,我不得不做一个额外的步骤来让DirtiesContext工作:
SpringJUnit4ClassRunner
有一个特性:它缓存所有启动的上下文,并仅在所有测试用例运行结束时销毁它们。原因是新的spring上下文的启动通常需要几秒钟,这会显著增加整个套件所需的时间
因此,如果您真的需要它,您可能应该扩展SpringJUnit4ClassRunner
,使其不缓存上下文。我猜这个跑步者可能已经有了这样的功能,但不幸的是我现在无法检查。试着检查它的代码。这并不复杂,也许你会很快找到解决方案
编辑:
只是用@DirtiesContext
注释了您的测试用例。看看细节