SpringbootTest + TestContainers:测试污染数据库后如何刷新数据库

时间:2019-05-29 19:55:13

标签: postgresql spring-boot spring-boot-test testcontainers

我正在使用这样的抽象类:

string photo = txtPhoto.Text;

然后我有很多利用此类的测试,如下所示:

@SpringBootTest(classes = MyAppApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public abstract class AbstractIntegrationTest {

    static {
        PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer().withPassword("password")
                .withUsername("postgres").withDatabaseName("MyApp");
        postgreSQLContainer.start();

        System.setProperty("spring.datasource.url", postgreSQLContainer.getJdbcUrl());
        System.setProperty("spring.datasource.password", postgreSQLContainer.getPassword());
        System.setProperty("spring.datasource.username", postgreSQLContainer.getUsername());

    }

但是,我的一些测试会污染数据库。我想控制测试是否在新数据库中运行。规定的方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用@Before注释在执行测试之前清除所有内容。

或者您在执行每个测试之前都要进行清理。

每个测试应独立于另一个。因此通常:

  • 明确并建立期望
  • 运行测试

如果测试失败,则数据库将处于失败状态,因此您可以检查发生了什么情况。

答案 1 :(得分:0)

在更多地了解了Spring Boot集成测试之后,看来规定的方法是对破坏性(或肮脏)的测试使用“ @DirtiesContext”注释。