Jedna klasa bazowa czy osobne instancje kontenerów testowych?

0

Cześć,
pierwszy raz korzystam z Testcontainers. Stworzyłem klasę bazową, którą mam zamiar używać do rozszerzania klas testowych. Zastanawiam się, czy jest to dobre podejście? Czy może powinienem definiować kontener osobno w każdej klasie testowej? Co myślicie?

Klasa bazowa:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@Testcontainers
public class BaseIT {
    @Container
    private static MySQLContainer<?> container = new MySQLContainer<>("mysql:8.2.0");

    @DynamicPropertySource
    public static void containerConfig(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", container::getJdbcUrl);
        registry.add("spring.datasource.username", container::getUsername);
        registry.add("spring.datasource.password", container::getPassword);
    }
}

Dzięki za pomoc.

2

Jeżeli wszystkie testy będą używać tego kontenera to klasa bazowa ma sens tylko upewnij się że kontener nie będzie się resetować między testami. Kontener powinien uruchomić się przed pierwszym testem, każdy test powinien na koniec robić rollback a kontener powinien się wyłączyc po ostatnim teście

0
lvyadhjpik napisał(a):

Jeżeli wszystkie testy będą używać tego kontenera to klasa bazowa ma sens tylko upewnij się że kontener nie będzie się resetować między testami. Kontener powinien uruchomić się przed pierwszym testem, każdy test powinien na koniec robić rollback a kontener powinien się wyłączyc po ostatnim teście

Zrobiłem refactor:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public class BaseIT {

    private static final MySQLContainer<?> container;

    static {
        container = new MySQLContainer<>("mysql:8.2.0")
                .withInitScript("data_sql/test-setup.sql")
                .withReuse(true);

        container.start();

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.