引言
在第 1 篇中,我们了解了 Testcontainers 的基本概念,并通过一个简单的 PostgreSQL 示例快速上手。本篇将进一步探索 Testcontainers 的核心功能,包括常用容器类、容器配置、生命周期管理,以及如何与主流测试框架集成。通过这些内容,你将能够更自信地使用 Testcontainers 来编写可靠的测试。
核心功能概览
Testcontainers 提供了丰富的功能,让开发者可以轻松管理测试中的容器化依赖。以下是本篇将重点介绍的几个方面:
- 常用容器类:开箱即用的专用容器支持。
- 容器配置:自定义端口、环境变量等。
- 生命周期管理:控制容器的启动、停止和重用。
- 测试框架集成:与 JUnit 和 Spring Boot 无缝协作。
常用容器类
Testcontainers 提供了多种预配置的容器类,针对常见服务进行了封装,简化使用过程。以下是几个典型例子:
GenericContainer
:通用容器类,可运行任何 Docker 镜像。PostgreSQLContainer
:专为 PostgreSQL 设计的容器,内置 JDBC 支持。MySQLContainer
:用于 MySQL 数据库的容器。KafkaContainer
:快速启动 Apache Kafka。LocalStackContainer
:模拟 AWS 服务(如 S3、SQS)。
示例:使用 MySQLContainer
以下是一个使用 MySQLContainer
的简单测试:
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import static org.junit.jupiter.api.Assertions.assertTrue;
@Testcontainers
public class SimpleMySQLTest {
@Container
public MySQLContainer<?> mysql = new MySQLContainer<>("mysql:8.0")
.withDatabaseName("testdb")
.withUsername("user")
.withPassword("password");
@Test
public void testCreateTable() throws Exception {
String jdbcUrl = mysql.getJdbcUrl();
try (<