scala - 一个测试容器用于多个测试
问题描述
我在 scala 上,我有多个针对不同类(测试套件)的测试文件,每个测试文件都使用测试容器(来自同一个脚本的初始化)。
当我在项目中启动所有测试时,所有测试都失败了(由于 testContainers 导致与数据库的连接问题)。
当我单独启动测试时,所有测试都成功。
有没有办法只为多个测试文件(测试套件)启动一个容器?TestContainerForAll
似乎仅适用于同一文件中的测试。
在@Matthias Berndt 回复后编辑:
这是我正在使用的库:
- "org.scalatest" %% "scalatest" % "3.0.8"
- “com.dimafeng” %% “testcontainers-scala-scalatest” % “0.38.1”
- “com.dimafeng”%%“testcontainers-scala-postgresql”%“0.38.1”
这里是我的代码
trait DAOTest extends ForAllTestContainer {
this: Suite =>
override val container: PostgreSQLContainer = PostgreSQLContainer()
container.container.withInitScript("extractData.sql")
container.start()
ConfigFactory.invalidateCaches()
System.setProperty("jdbc.url", container.jdbcUrl)
ConfigFactory.invalidateCaches()
}
解决方案
假设您使用的是 Scalatest,应该可以使用嵌套套件。我将在这里使用 MySQL 作为示例,因为这就是 testcontainers-scala 使用的:
class MysqlSpec extends FlatSpec with ForAllTestContainer {
override val container = MySQLContainer()
override def nestedSuites = Vector(
new SomeDatabaseTest(container)
)
}
class SomeDatabaseTest(container: MySQLContainer) extends FlatSpec {
it should "do something" in {
// do stuff with the container
}
}
推荐阅读
- android - 如何在Android SurfaceView上实现并绘制自定义按钮
- ruby-on-rails - 查找聊天主题
- php - 使用 PHP 动态创建站点地图
- java - 如何使用jackson api将高json层次结构复制到java对象中?
- javascript - ChartJS 在滚动时固定 y 轴
- c - 如何从 gdb 中的多个断点列表中删除断点?
- swift - 文件“MainViewController.swift”是模块“图表”的一部分;忽略导入
- spinnaker - 将参数从一个管道传递到另一个管道的最佳实践
- android - React-native google 登录给开发人员错误
- azure-iot-edge - [Azure][ACR] IoT 边缘模块部署到 raspi 设备失败