
dev.vality.testcontainers.annotations.minio.MinioTestcontainerSingleton Maven / Gradle / Ivy
package dev.vality.testcontainers.annotations.minio;
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 @MinioTestcontainerSingleton} подключает и запускает тестконтейнер
* {@link org.testcontainers.containers.GenericContainer}, также
* настройки контейнера будут проинициализированы в контекст тестового приложения
* Аннотация не требует дополнительной конфигурации
*
Пример использования в коде — в
* file-storage
*
Синглтон
* Аннотация является {@link MinioTestcontainer} в режиме
* синглтона —
* создаваемый тестконтейнер {@link org.testcontainers.containers.GenericContainer}
* будет создан один раз (в разрезе всего набора тестовых классов в пакете test) и будет переиспользоваться
* в каждом тестовом классе
*
Аннотация никак не обеспечивает изоляцию данных между тестами. Но попробуйте найти айдишник файла
* в бакете из другого файла с тестами KEKW
*
Примеры
* В примере ниже {@link MinioTestcontainerSingleton} подключается напрямую
* к {@link SpringBootTest} для проведения теста, при котором идет запись и чтение данных из хранилища с файлами
*
{@code
* @MinioTestcontainerSingleton
* @SpringBootTest
* public class FileStorageTest {
* }}
* В примере ниже {@link MinioTestcontainerSingleton} подключается к
* {@link DefaultSpringBootTest},
* таким образом создается удобная обертка, которую можно использовать для набора тестов
*
{@code
* @Target({ElementType.TYPE})
* @Retention(RetentionPolicy.RUNTIME)
* @MinioTestcontainerSingleton
* @DefaultSpringBootTest
* public @interface MinioSpringBootITest {
* }}
* {@code
* @MinioSpringBootITest
* public class FileStorageTest {
* }}
*
* @see MinioTestcontainer @MinioTestcontainer
* @see ExtendWith @ExtendWith
* @see org.testcontainers.containers.GenericContainer PostgreSQLContainer
* @see DefaultSpringBootTest @DefaultSpringBootTest
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(MinioTestcontainerExtension.class)
public @interface MinioTestcontainerSingleton {
/**
* Аналогичный параметр как у аннотации {@link SpringBootTest#properties()}
*
* пример — properties = {"minio.make.happy=true",...}
*/
String[] properties() default {};
/**
* параметр для инициализации s3 client
*
* name should be in lowercase!
*/
String bucketName() default "test";
}