在 JUnit 5 测试类之间共享数据库连接
Posted
技术标签:
【中文标题】在 JUnit 5 测试类之间共享数据库连接【英文标题】:Share database connection between JUnit 5 test classes 【发布时间】:2021-03-01 05:39:28 【问题描述】:我在不同的测试包中有 6 个 JUnit 类。我想使用 Spring 框架使用的 application.properties
文件来设置数据库连接。
问题是如何在第一个 JUnit 测试运行时创建数据库连接并将其重用于所有类。最后正确关闭连接。
【问题讨论】:
【参考方案1】:您可以为此使用Testcontainers。如果您想重用现有的数据库容器(例如 PostgreSQL 或 mysql),请确保使用手动容器生命周期方法并启动容器一次(例如在抽象测试类中)。测试容器调用这个Singleton containers:
abstract class AbstractContainerBaseTest
static final MySQLContainer MY_SQL_CONTAINER;
static
MY_SQL_CONTAINER = new MySQLContainer();
MY_SQL_CONTAINER.start();
class FirstTest extends AbstractContainerBaseTest
@Test
void someTestMethod()
String url = MY_SQL_CONTAINER.getJdbcUrl();
// create a connection and run test as normal
一旦您的 JVM 终止,您的容器将被删除。
另一种方法是reuse feature of Testcontainers:
static PostgreSQLContainer postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer()
.withDatabaseName("test")
.withUsername("duke")
.withPassword("s3cret")
.withReuse(true);
如果您的所有测试的数据库设置都相似,并且您选择加入此功能,则 Testcontainers 将重用已启动的容器。请记住,使用这种方法时,您必须自己清理容器,因为它们在所有测试完成后仍然活着。
【讨论】:
很遗憾我正在为这个数据库使用 MSSQL 服务器? 没问题,Testcontainers也有MSSQL module。以上是关于在 JUnit 5 测试类之间共享数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
如何编写单元测试 (JUnit) 以使用 DAO 类检查数据库连接?