如何在scala中使用TestContainers重用容器?

piwo6bdm  于 2023-03-08  发布在  Scala
关注(0)|答案(1)|浏览(149)

我有一些使用TestConatiners运行的容器,还有一些要测试的服务。对于每个服务,我都有一个单独的文件(测试套件),在里面我有测试。我有一个类,我定义了容器的逻辑- beforeAll我启动容器,afterAll我停止所有容器,所有测试套件文件都扩展了这个类。问题开始于切换测试套件期间,我想让容器保持运行,而不是停止并重新运行每个测试套件,这会导致测试管道非常慢。
这是一个很好的例子-https://callistaenterprise.se/blogg/teknik/2020/10/09/speed-up-your-testcontainers-tests/
但问题是Scala中没有静态
关于如何使用testconatiners-scala来实现这一点,你有什么建议吗?

vh0rcniy

vh0rcniy1#

在Scala中,您可以使用一个伴随对象实现相同的行为
https://docs.scala-lang.org/tour/singleton-objects.html

object AbstractContainerBaseSpec {
  private val containerDef =
    GenericContainer.Def(
      "redis:5.0.3-alpine", // whatever image you need
      exposedPorts = Seq(6379),
    ).start()
}

// extend this abstract class with your test class
abstract class AbstractContainerBaseSpec {}

这应该与示例中提到的Singleton容器模式以及官方文档中的描述相同
https://www.testcontainers.org/test_framework_integration/manual_lifecycle_control/#singleton-containers

abstract class AbstractContainerBaseTest {

    static final MySQLContainer MY_SQL_CONTAINER;

    static {
        MY_SQL_CONTAINER = new MySQLContainer();
        MY_SQL_CONTAINER.start();
    }
}

我在这里创建了一个最小的演示来展示这种行为:https://github.com/bauerei/testcontainers-scala-singleton-demo

相关问题