要在 Spring 测试中使用嵌入式 MySQL,可以使用 testcontainers
库来实现。testcontainers
是一个用于 Docker 化应用程序的 Java 库,它可以为你提供各种类型的数据库镜像。
以下是一个使用 Embedded MySQL 进行 Spring Boot 测试的示例:
- 添加 Maven 依赖
在项目的 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<version>1.15.2</version>
<scope>test</scope>
</dependency>
- 配置测试类
在需要进行测试的类上添加以下注解:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Testcontainers
public class MyServiceTest {
// ...
}
这将告诉 Spring 在启动测试时随机分配一个端口,并且告诉 JUnit 使用 Testcontainers 运行容器。
- 配置 Embedded MySQL 容器
在测试类中定义一个静态字段,用于保存 Testcontainers 的 MySQL 容器实例:
@Container
public static final MySQLContainer<?> mysql = new MySQLContainer<>("mysql:8")
.withDatabaseName("testdb")
.withUsername("root")
.withPassword("");
该容器会自动下载并运行名为 mysql:8
的镜像,并配置好用户名、密码和数据库名称。如果需要更改默认设置,则可以调用其他方法进行配置。
- 获取连接信息
可以通过以下方式获取连接信息:
String url = mysql.getJdbcUrl();
String username = mysql.getUsername();
String password = mysql.getPassword();
- 编写测试用例
在测试用例中使用上述连接信息来连接数据库并执行相关操作即可。
@Test
public void testMyService() {
MyService myService = new MyService(url, username, password);
// ...
}
以上就是使用 Embedded MySQL 进行 Spring Boot 测试的基本流程。注意,在测试结束后,Testcontainers 会自动停止容器并清理环境。