如何在scalatest中的并行测试之前初始化共享变量

How to initialize shared variables before parallel test in scalatest

我有如下最严重的代码:

class myTest extends FlatSpec with ParallelTestExecution {  

    val testSuiteId: String = GenerateSomeRandomId() 

    it should "print test id" in { 
        println(testSuiteId)
    } 

    it should "print test id again" in { 
        println(testSuiteId) 
    }
} 

这两个测试无法打印我在它们之前生成的testSuiteId。相反,他们重新生成 ID 并打印出来。我知道由于扩展了 OneInstancePerTest 的 ParallelTestExecution,这里的每个测试都在其自己的实例上运行并具有变量 "testSuiteId".

的副本

但是我确实想要这个测试套件的固定 ID,并且这个套件中的每个测试用例都可以访问这个固定的 Id 而无需修改它。我尝试在 BeforeAll{ } 中创建固定 ID,但仍然无效。

我应该如何实现我想要的?

一种解决方法是将共享状态放在某种外部对象中:

object SuiteId {
  lazy val id: String = GenerateSomeRandomId()
}

不可否认,这完全是一个 hack,如果 scalatest 有办法处理这个我不知道的内置函数,我不会感到惊讶。