首页 > 解决方案 > 一个测试容器用于多个测试

问题描述

我在 scala 上,我有多个针对不同类(测​​试套件)的测试文件,每个测试文件都使用测试容器(来自同一个脚本的初始化)。

当我在项目中启动所有测试时,所有测试都失败了(由于 testContainers 导致与数据库的连接问题)。

当我单独启动测试时,所有测试都成功。

有没有办法只为多个测试文件(测试套件)启动一个容器?TestContainerForAll似乎仅适用于同一文件中的测试。


在@Matthias Berndt 回复后编辑

这是我正在使用的库:

这里是我的代码


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()

}

标签: scalascalatesttestcontainers

解决方案


假设您使用的是 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
  }
}

推荐阅读