Scala 一个testcontainers用于多个测试

Scala 一个testcontainers用于多个测试,scala,scalatest,testcontainers,Scala,Scalatest,Testcontainers,我在scala上,我有多个不同类(TestSuite)的测试文件,每个测试文件都使用testcontainers(来自同一脚本的init) 当我启动项目中的所有测试时,所有测试都失败了(由于testContainers,与数据库的连接出现问题) 当我单独启动测试时,所有测试都会成功 有没有办法只为多个测试文件(TestSuite)启动一个容器TestContainerForAll似乎只适用于同一文件中的测试 在@Matthias Berndt回复后编辑: 这里是我正在使用的LIB: “org

我在scala上,我有多个不同类(TestSuite)的测试文件,每个测试文件都使用testcontainers(来自同一脚本的init)

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

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

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


在@Matthias Berndt回复后编辑:

这里是我正在使用的LIB:

  • “org.scalatest”%%“scalatest”%%“3.0.8”
  • “com.dimafeng”%%“testcontainers scala scalatest”%%“0.38.1”
  • “com.dimafeng”%%“testcontainers scala postgresql”%%“0.38.1”
这是我的密码


测试扩展了AllTestContainer{
这个:Suite=>
覆盖val容器:PostgreSQLContainer=PostgreSQLContainer()
container.container.withInitScript(“extractData.sql”)
container.start()
ConfigFactory.invalidateCaches()
System.setProperty(“jdbc.url”,container.jdbcUrl)
ConfigFactory.invalidateCaches()
}

其中一个选项是(用java术语)创建抽象基类,将容器声明为静态变量,并在测试中扩展该类。在这种情况下,在加载基类时只会创建一次容器。

假设您使用的是Scalatest,那么应该可以使用嵌套套件。这里我将使用MySQL作为示例,因为testcontainers scala就是这样使用的:

类MysqlSpec使用ForAllTestContainer扩展了FlatSpec{
覆盖val容器=MySQLContainer()
覆盖def nestedSuites=Vector(
新数据库测试(容器)
)
}
class SomeDatabaseTest(容器:MySQLContainer)扩展了FlatSpec{
它应该“做点什么”{
//用这个容器装东西
}
}

Downvoting,因为Scala中没有静态变量,而且这个解决方案在运行测试后不会关闭容器。这个问题太草率了。没有指定使用的测试框架(必须从testcontainers scala中的
TestContainerForAll
类推断ScalaTest)。没有显示您正在做什么的代码。没有显示问题的错误消息。所以downvoting.updated正如你所建议的做得好。然而现在的问题是:嵌套套件解决不了什么问题?