Skip to content

Latest commit

History

History
178 lines (138 loc) 路 7.94 KB

File metadata and controls

178 lines (138 loc) 路 7.94 KB

testcontainers-annotations-junit5

Maven Central

袪械锌芯蟹懈褌芯褉懈泄 褋 邪薪薪芯褌邪褑懈褟屑懈, 泻芯褌芯褉褘械 锌芯写泻谢褞褔邪褞褌 懈 蟹邪锌褍褋泻邪褞褌 褌械褋褌泻芯薪褌械泄薪械褉褘 (TestContainers) 懈 懈薪懈褑懈邪谢懈蟹懈褉褍褞褌 runtime 薪邪褋褌褉芯泄泻懈 褌械褋褌泻芯薪褌械泄薪械褉芯胁 (url, username, password, etc) 胁 泻芯薪褌械泻褋褌 SpringBoot 锌褉懈谢芯卸械薪懈褟

馃毃袪邪斜芯褌邪械褌 褌芯谢褜泻芯 褋 JUnit 5馃毃

袗薪薪芯褌邪褑懈懈

袩褉芯械泻褌芯屑 锌芯写写械褉卸懈胁邪褞褌褋褟 褋谢械写褍褞褖懈械 docker images

postgres
apache/kafka
confluentinc/kafka
clickhouse/clickhouse-server
minio/minio
opensearchproject/opensearch

袘邪蟹芯胁褘械 邪薪薪芯褌邪褑懈懈 写谢褟 懈褋锌芯谢褜蟹芯胁邪薪懈褟:

basic singleton
@PostgresqlTestcontainer @PostgresqlTestcontainerSingleton
@KafkaTestcontainer @KafkaTestcontainerSingleton
@ClickhouseTestcontainer @ClickhouseTestcontainerSingleton
@MinioTestcontainer @MinioTestcontainerSingleton
@OpensearchTestcontainer @OpensearchTestcontainerSingleton

Embedded 褉械卸懈屑 斜械蟹 Docker

袛谢褟 谢械谐泻芯胁械褋薪褘褏 懈薪褌械谐褉邪褑懈芯薪薪褘褏 褌械褋褌芯胁 屑芯卸薪芯 懈褋锌芯谢褜蟹芯胁邪褌褜 embedded-邪薪薪芯褌邪褑懈懈. 袘懈斜谢懈芯褌械泻邪 褋邪屑邪 蟹邪锌褍褋泻邪械褌 谢芯泻邪谢褜薪褘泄 backend. 袨薪邪 懈薪懈褑懈邪谢懈蟹懈褉褍械褌 runtime-薪邪褋褌褉芯泄泻懈 胁 Spring context 懈 芯褔懈褖邪械褌 写邪薪薪褘械 屑械卸写褍 test methods.

embedded backend
@EmbeddedPostgresqlTest io.zonky.test embedded-postgres
@EmbeddedKafkaTest spring-kafka-test EmbeddedKafka

袩褉懈屑械褉:

@EmbeddedPostgresqlTest
@EmbeddedKafkaTest(
        topics = {
                "magista-invoicing-test",
                "magista-invoice-template-test"
        },
        properties = {
                "kafka.topics.invoicing.id=magista-invoicing-test",
                "kafka.topics.invoicing.consume.enabled=true",
                "kafka.topics.invoice-template.id=magista-invoice-template-test",
                "kafka.topics.invoice-template.consume.enabled=true"
        }
)
@SpringBootTest
class KafkaListenerTest {
}

袛谢褟 懈蟹屑械薪械薪懈褟 docker image tag, 泻芯褌芯褉褘泄 懈褋锌芯谢褜蟹褍械褌褋褟 褌械褋褌泻芯薪褌械泄薪械褉邪屑懈 薪褍卸薪芯 锌械褉械芯锌褉械写械谢懈褌褜 锌邪褉邪屑械褌褉褘 胁 application.yml:

testcontainers:
  postgresql:
    tag: '17'
  kafka:
    apache:
      tag: '3.8.0'
    confluent:
      tag: '7.8.0'
  clickhouse:
    tag: '23.10.3'
  minio:
    tag: 'RELEASE.2021-10-13T00-23-17Z'
    user: 'minio'
    password: 'minio123'
  opensearch:
    tag: '2.0.0'

E褋谢懈 锌邪褉邪屑械褌褉 薪械 褍泻邪蟹邪薪 斜懈斜谢懈芯褌械泻邪 斜褍写械褌 懈褋锌芯谢褜蟹芯胁邪褌褜 锌邪褉邪屑械褌褉褘 锌芯 褍屑芯谢褔邪薪懈褞, 褍泻邪蟹邪薪薪褘械 胁 褉械锌芯蟹懈褌芯褉懈懈 胁 褎邪泄谢械 testcontainers-annotations.yml

袪械褋械褉褔聽聽

袙 写芯屑械薪械 ValityDev 褉邪褋锌褉芯褋褌褉械薪邪 锌褉邪泻褌懈泻邪 褋芯蟹写邪薪懈褟 懈薪褌械谐褉邪褑懈芯薪薪褘褏 褌械褋褌芯胁 褋 懈褋锌芯谢褜蟹芯胁邪薪懈械屑 褑械锌芯褔泻懈 薪邪褋谢械写芯胁邪薪懈褟 泻谢邪褋褋芯胁, 泻芯谐写邪 褉芯写懈褌械谢褜 褟胁谢褟械褌褋褟 泻谢邪褋褋芯屑 褋 泻芯薪褎懈谐芯屑 褌械褋褌邪, 胁 泻芯褌芯褉芯泄 褋锌褉褟褌邪薪邪 胁褋褟 褌械褏薪懈褔械褋泻邪褟 懈薪懈褑懈邪谢懈蟹邪褑懈褟 褋锌褉懈薪谐芯胁芯谐芯 锌褉懈谢芯卸械薪懈褟 懈 胁薪械褕薪懈褏 蟹邪胁懈褋懈屑芯褋褌械泄, 泻芯褌芯褉褘械 锌芯 褋褌邪薪写邪褉褌褍 褟胁谢褟褞褌褋褟 TestContainers

袣谢邪褋褋-褉芯写懈褌械谢褜 褋 泻芯薪褎懈谐芯屑 写谢褟 褌械褋褌芯胁, 写谢褟 泻芯褌芯褉褘褏 褟胁谢褟械褌褋褟 薪械芯斜褏芯写懈屑褘屑 懈褋锌芯谢褜蟹芯胁邪薪懈褟 PostgreSQL 胁 泻邪褔械褋褌胁械 胁薪械褕薪械泄 蟹邪胁懈褋懈屑芯褋褌懈:

  
@SpringBootTest
@Testcontainers
@DirtiesContext
@ContextConfiguration(classes = Application.class,
        initializers = Initializer.class)
public abstract class AbstractPostgreTestContainerConfig {

    private static final String POSTGRESQL_IMAGE_NAME = "postgres";
    private static final String POSTGRESQL_VERSION = "9.6";

    @Container
    public static final PostgreSQLContainer DB = new PostgreSQLContainer(DockerImageName
            .parse(POSTGRESQL_IMAGE_NAME)
            .withTag(POSTGRESQL_VERSION));

    public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        @Override
        public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
            TestPropertyValues.of(
                    "spring.datasource.url=" + DB.getJdbcUrl(),
                    "spring.datasource.username=" + DB.getUsername(),
                    "spring.datasource.password=" + DB.getPassword(),
                    "flyway.url=" + DB.getJdbcUrl(),
                    "flyway.user=" + DB.getUsername(),
                    "flyway.password=" + DB.getPassword()
            ).applyTo(configurableApplicationContext);
        }
    }
}
  

袣 锌谢褞褋邪屑 写邪薪薪芯谐芯 褉械褕械薪懈褟 屑芯卸薪芯 芯褌薪械褋褌懈 褌芯褌 褎邪泻褌, 褔褌芯 褋邪屑懈 褌械褋褌褘 褋褌邪薪芯胁褟褌褋褟 斜芯谢械械 褔懈褌邪械屑褘屑, 胁 泻芯褌芯褉褘褏 薪械褌 薪懈褔械谐芯 谢懈褕薪械谐芯, 泻褉芯屑械 锌芯泻褉褘褌懈褟 斜懈蟹薪械褋-谢芯谐懈泻懈 锌褉懈谢芯卸械薪懈褟

孝芯谐写邪 褌懈锌懈褔薪褘泄 褌械褋褌 Dao 褋谢芯褟 斜褍写械褌 胁褘谐谢褟写械褌褜 泻邪泻:

  
class PaymentDaoTest extends AbstractPostgreTestContainerConfig {

    @Autowired
    PaymentDao paymentDao;
  
  ...

}

袙 褝褌芯屑 屑芯屑械薪褌械 锌芯褟胁懈谢芯褋褜 卸械谢邪薪懈械 懈蟹斜邪胁懈褌褜褋褟 芯褌 褋邪屑芯谐芯 褋锌芯褋芯斜芯 芯褉谐邪薪懈蟹邪褑懈懈 懈薪懈褑懈邪谢懈蟹邪褑懈懈 褌械褋褌芯胁 褋 懈褋锌芯谢褜蟹芯胁邪薪懈械屑 锌芯褉芯卸写邪褞褖械谐芯 泻谢邪褋褋邪, 泻芯褌芯褉邪褟 胁谢械褔械褌 锌芯胁褘褕械薪懈械 蟹邪锌褍褌邪薪薪芯褋褌懈 泻芯写邪, 薪芯 锌褉懈 褝褌芯屑 褋芯褏褉邪薪懈褌褜 锌褉懈械屑谢械屑褘泄 褍褉芯胁械薪褜 谢邪泻芯薪懈褔薪芯褋褌懈 懈 锌褉芯褋褌芯褌褘, 褋胁械褋褌懈 蟹邪锌褍褌邪薪薪芯褋褌褜 泻 屑懈薪懈屑褍屑褍, 懈蟹斜邪胁懈褌褜褋褟 芯褌 薪邪褋谢械写芯胁邪薪懈褟

袙屑械褋褌芯 懈褋锌芯谢褜蟹芯胁邪薪懈褟 锌芯褉芯卸写邪褞褖械谐芯 泻谢邪褋褋邪 褋 泻芯薪褎懈谐邪屑懈 写谢褟 褌械褋褌芯胁 屑芯卸薪芯 懈褋锌芯谢褜蟹芯胁邪褌褜 芯锌懈褋邪薪懈械 褌械褋褌邪 褔械褉械蟹 邪薪薪芯褌邪褑懈懈 胁 泻芯褌芯褉褘褏 褋芯写械褉卸懈褌褋褟 胁褋褟 薪械芯斜褏芯写懈屑邪褟 泻芯薪褎懈谐褍褉邪褑懈褟 写谢褟 褌械褋褌邪. 袝褋谢懈 蟹写械褋褜 褋褉邪胁薪懈褌褜 写邪薪薪褘泄 懈薪褋褌褉褍屑械薪褌 褋 懈褋锌芯谢褜蟹芯胁邪薪懈械屑 @Testcontaners@Container 褌芯 褝褌芯 褟胁谢褟械褌褋褟 褝泻胁懈胁邪谢械薪褌邪屑懈, 薪芯 写邪薪薪邪褟 斜懈斜谢懈芯褌械泻邪 锌褉褟褔械褌 锌褉芯褑械褋褋 懈薪懈褑懈邪谢懈蟹邪褑懈懈 锌芯写 泻邪锌芯褌. 袣邪泻 屑芯卸薪芯 褍胁懈写械褌褜 懈蟹 锌褉懈屑械褉芯胁 锌褉懈 懈褋锌芯谢褜蟹芯胁邪薪懈懈 @Testcontaners 锌芯褟胁谢褟械褌褋褟 芯写薪芯芯斜褉邪蟹薪褘泄 泻芯写 泻芯褌芯褉褘泄 褌懈褉邪卸懈褉褍械褌褋褟 (泻芯锌懈锌邪褋褌懈褌褋褟) 锌芯 胁褋械屑 褎邪泄谢邪屑 褋 泻谢邪褋褋邪屑懈 懈 褌械褋褌邪屑懈. 袝褋谢懈 芯薪 芯写薪芯芯斜褉邪蟹薪褘泄 械谐芯 卸械 屑芯卸薪芯 胁褘薪械褋褌懈 胁 芯写薪芯 屑械褋褌芯, 胁械褉薪芯?

袩谢褞褋, 写邪薪薪褘泄 懈薪褋褌褉褍屑械薪褌 写邪械褌 胁芯蟹屑芯卸薪芯褋褌褜 懈褋锌芯谢褜蟹芯胁邪褌褜 褋懈薪谐谢褌芯薪, 械褋谢懈 薪械褌 锌褉褟屑芯泄 薪械芯斜褏芯写懈屑芯褋褌懈 锌械褉械蟹邪锌褍褋泻邪褌褜 泻芯薪褌械泄薪械褉 锌褉懈 泻邪卸写芯屑 褌械褋褌械