我为我的集成测试创建了一个嵌入式 Sftp 服务器 bean,我分别使用 afterPropertiesSet 连接了服务器的启动和关闭并破坏了生命周期
public class EmbeddedSftpServer implements InitializingBean, DisposableBean {
//other class content
@Override
public void afterPropertiesSet() throws Exception {
//Code for starting server here
}
@Override
public void destroy() throws Exception {
//Code for stopping server here
}
}
这是我的配置类
@TestConfiguration
public class SftpTestConfig {
@Bean
public EmbeddedSftpServer embeddedSftpServer() {
return new EmbeddedSftpServer();
}
//Other bean definitions
}
现在,当我在我的测试类中注入 bean 时,如下所示:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SftpTestConfig .class)
class ExampleOneIT {
@Autowired
private EmbeddedSftpServer embeddedSftpServer;
}
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SftpTestConfig .class)
class ExampleTwoIT {
@Autowired
private EmbeddedSftpServer embeddedSftpServer;
}
@SpringBatchTest
@ContextConfiguration(classes = SftpTestConfig .class)
class ExampleThreeIT {
@Autowired
private EmbeddedSftpServer embeddedSftpServer;
}
而且我同时运行所有测试类,我发现对于使用@ExtendWith(SpringExtension.class) 注释的测试类,它使用的是相同的上下文(这是可以理解的,因为我猜是spring缓存它),因此是bean生命周期方法不会再次执行,但令我惊讶的是,对于使用 @SpringBatchTest 注释的类,我注意到 bean 的生命周期钩子再次执行!这是一种不方便的行为,因为我希望应用程序上下文为所有测试启动一次服务器并在这些测试结束时关闭它(如果我只对所有测试使用 @ExtendWith(SpringExtension.class) 就是这种情况我的测试课)。
注意:我的 ExampleThreeIT 测试类需要使用 @SpringBachTest。