Java 如果测试失败,如何配置testcontainers使数据库容器保持运行?

Java 如果测试失败,如何配置testcontainers使数据库容器保持运行?,java,testing,junit,integration-testing,testcontainers,Java,Testing,Junit,Integration Testing,Testcontainers,使用时的正常行为是,由于通过或失败,它将在测试完成时关闭容器 是否有方法配置测试容器,以便在测试失败时保留数据库容器以帮助调试?是的,您可以使用Testcontainers的重用功能(处于alpha状态)在测试后不关闭容器 为此,您需要Testcontainers>=1.12.3并使用属性文件~/.Testcontainers.properties testcontainers.reuse.enable=true 接下来,声明要重用的容器: static PostgreSQLContainer

使用时的正常行为是,由于通过或失败,它将在测试完成时关闭容器


是否有方法配置测试容器,以便在测试失败时保留数据库容器以帮助调试?

是的,您可以使用Testcontainers的重用功能(处于alpha状态)在测试后不关闭容器

为此,您需要Testcontainers>=1.12.3并使用属性文件
~/.Testcontainers.properties

testcontainers.reuse.enable=true
接下来,声明要重用的容器:

static PostgreSQLContainer postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer()
  .withDatabaseName("test")
  .withUsername("duke")
  .withPassword("s3cret")
  .withReuse(true);
并确保不要使用JUnit4或JUnit5注释来管理容器的生命周期。而是在每个之前使用单例容器或在
@内部启动它们:

静态最终PostgreSQLContainer PostgreSQLContainer

static {
  postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer()
    .withDatabaseName("test")
    .withUsername("duke")
    .withPassword("s3cret")
    .withReuse(true);
 
  postgreSQLContainer.start();
}
这个特性是为了加速后续的测试,因为容器仍将处于启动和运行状态,但我想这也适合您的用例

你可以找到详细的指南