SpringbootTest + TestContainers: как обновить базу данных после того, как тесты загрязнили базу данных - PullRequest
0 голосов
/ 29 мая 2019

Я использую абстрактный класс, подобный этому:

@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());

    }

Тогда у меня есть много тестов, использующих этот класс, например:

public class moreTests extends AbstractIntegrationTest {

    TestRestTemplate restTemplate = new TestRestTemplate("my-user", "password"); 
    HttpHeaders headers = new HttpHeaders();

    @Test
    public void SimpleHealthCheck() {    
        HttpEntity<String> entity = new HttpEntity<String>(null, headers);    
        ResponseEntity<String> response = restTemplate.exchange(
                createURLWithPort("/api/v1/healthcheck"),
                HttpMethod.GET, entity, String.class);    
        assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
    }

    @Test
    public void GetInst() {    
        HttpEntity<String> entity = new HttpEntity<String>(null, headers);    
        ResponseEntity<String> response = restTemplate.exchange(
                createURLWithPort("/api/v1/institutions"),
                HttpMethod.GET, entity, String.class);
        assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));    
    }

Однако некоторые из моих тестов будут загрязнять базу данных. Я хотел бы проверить, выполняется ли тест со свежей базой данных или нет. Каков предписанный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

После прочтения о тестировании интеграции загрузки Spring, кажется, предписанный способ - использовать аннотацию "@DirtiesContext" для тестов, которые являются деструктивными (или грязными).

0 голосов
/ 30 мая 2019

вы либо используете аннотацию @Before для очистки всего перед выполнением ваших тестов.

Или вы выполняете очистку в каждом тесте перед выполнением.

Каждый тест должен быть независимым от другого. Так обычно:

  • очистить и настроить ожидания
  • запустить тест

Если тест не пройден, ваша база данных будет в состоянии сбоя, чтобы вы могли проверить, что произошло.

...