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

dev.vality.testcontainers.annotations.clickhouse.ClickhouseTestcontainerSingleton Maven / Gradle / Ivy

package dev.vality.testcontainers.annotations.clickhouse;

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

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

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

Аннотация требует дополнительной конфигурации * {@link ClickhouseTestcontainerSingleton#migrations()}} и {@link ClickhouseTestcontainerSingleton#dbNameShouldBeDropped()} *

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

Синглтон

*

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

Аннотация использует {@link ClickhouseTestcontainerSingleton#dbNameShouldBeDropped()} для изоляции тестовых данных * в разрезе каждого тестового метода. Перед запуском каждого файла с тестами данные в базе * будут стерты посредством выполенение команды 'DROP DATABASE IF EXISTS', при этом контейнер * остается висеть запущенным, * таким образом, в каждом файле с тестами база будет свежая и чистая *

Примеры

*

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

 {@code
 * @ClickhouseTestcontainerSingleton(
 *         dbNameShouldBeDropped = "fraud",
 *         migrations = {
 *                 "sql/db_init.sql",
 *                 "sql/V4__create_payment.sql"})
 * @SpringBootTest
 * public class AdjustmentDaoTest {
 *
 *     @Autowired
 *     private AdjustmentDao adjustmentDao;
 *
 *   ...
 * }}
*

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

 {@code
 * @Target({ElementType.TYPE})
 * @Retention(RetentionPolicy.RUNTIME)
 * @ClickhouseTestcontainerSingleton(
 *         dbNameShouldBeDropped = "fraud",
 *         migrations = {
 *                 "sql/db_init.sql",
 *                 "sql/V4__create_payment.sql"})
 * @DefaultSpringBootTest
 * public @interface ClickhouseSpringBootITest {
 *
 * }}
*
 {@code
 * @ClickhouseSpringBootITest
 * public class AdjustmentDaoTest {
 *
 *     @Autowired
 *     private AdjustmentDao adjustmentDao;
 *     ...
 * }}
* * @see ClickhouseTestcontainer @ClickhouseTestcontainer * @see ExtendWith @ExtendWith * @see org.testcontainers.containers.ClickHouseContainer ClickHouseContainer * @see DefaultSpringBootTest @DefaultSpringBootTest */ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @ExtendWith(ClickhouseTestcontainerExtension.class) public @interface ClickhouseTestcontainerSingleton { /** * Аналогичный параметр как у аннотации {@link SpringBootTest#properties()} *

* пример — properties = {"сlickhouse.make.happy=true",...} */ String[] properties() default {}; /** * Обязательный параметр — здесь указываются файлы с миграциями для кликхауза *

* пример — migrations = {"sql/db_init.sql","sql/V1__create_payment.sql",...} */ String[] migrations(); /** * Обязательный параметр — здесь указывается имя базы данных, которая будет дропнута * при каждом запуске нового файла с тестами, таким образом обеспечивая изоляцию данных между тестами * и предоставляя каждый раз чистую базу *

* пример — dbNameShouldBeDropped = "fraud" */ String dbNameShouldBeDropped(); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy