All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.vality.testcontainers.annotations.postgresql.PostgresqlTestcontainerSingleton Maven / Gradle / Ivy

package dev.vality.testcontainers.annotations.postgresql;

import dev.vality.testcontainers.annotations.DefaultSpringBootTest;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Аннотация {@code @PostgresqlTestcontainerSingleton} подключает и запускает тестконтейнер
 * {@link org.testcontainers.containers.PostgreSQLContainer}, также
 * настройки контейнера будут проинициализированы в контекст тестового приложения
 * 

Аннотация не требует дополнительной конфигурации *

Пример использования в коде — в * magista *

Синглтон

*

Аннотация является {@link PostgresqlTestcontainer} в режиме * синглтона — * создаваемый тестконтейнер {@link org.testcontainers.containers.PostgreSQLContainer} * будет создан один раз (в разрезе всего набора тестовых классов в пакете test) и будет переиспользоваться * в каждом тестовом классе *

Аннотация использует {@link Transactional} для изоляции тестовых данных * в разрезе каждого тестового метода. После каждого теста аннотация будет делать роллбек всех изменений, * таким образом, в каждом тесте база будет свежая и чистая *

Примеры

*

В примере ниже {@link PostgresqlTestcontainerSingleton} подключается напрямую * к {@link SpringBootTest} для проведения теста DAO слоя, при котором идет запись и чтение данных из базы данных *

 {@code
 * @PostgresqlTestcontainerSingleton
 * @SpringBootTest
 * public class AdjustmentDaoTest {
 *
 *     @Autowired
 *     private AdjustmentDao adjustmentDao;
 *
 *   ...
 * }}
*

В примере ниже {@link PostgresqlTestcontainerSingleton} подключается к * {@link DefaultSpringBootTest}, * таким образом создается удобная обертка, которую можно использовать для набора тестов *

 {@code
 * @Target({ElementType.TYPE})
 * @Retention(RetentionPolicy.RUNTIME)
 * @PostgresqlTestcontainerSingleton
 * @DefaultSpringBootTest
 * public @interface PostgresqlSpringBootITest {
 *
 * }}
*
 {@code
 * @PostgresqlSpringBootITest
 * public class AdjustmentDaoTest {
 *
 *     @Autowired
 *     private AdjustmentDao adjustmentDao;
 *     ...
 * }}
* * @see PostgresqlTestcontainer @PostgresqlTestcontainer * @see ExtendWith @ExtendWith * @see Transactional @Transactional * @see org.testcontainers.containers.PostgreSQLContainer PostgreSQLContainer * @see DefaultSpringBootTest @DefaultSpringBootTest */ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @ExtendWith(PostgresqlTestcontainerExtension.class) @Transactional public @interface PostgresqlTestcontainerSingleton { /** * Аналогичный параметр как у аннотации {@link SpringBootTest#properties()} *

* пример — properties = {"postgresql.make.happy=true",...} */ String[] properties() default {}; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy