Как инициализировать общие переменные перед параллельным тестом в ScaleTest

У меня есть самые масштабные коды, например:

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 перед ними. Вместо этого они регенерируют идентификатор и распечатывают его. Я понимаю, что из-за ParallelTestExecution, который расширяет OneInstancePerTest, каждый тест здесь запускается на собственном экземпляре и имеет копию переменной testSuiteId.

Но мне нужен фиксированный идентификатор для этого набора тестов, и каждый тестовый пример в этом наборе имеет доступ к этому исправленному без изменения. Я попытался создать фиксированный идентификатор в BeforeAll {}, но все равно это не сработало.

Как мне достичь того, чего я хочу?


person yay1    schedule 11.09.2017    source источник
comment
Зачем тебе ParallelTestExecution?   -  person pedromss    schedule 12.09.2017
comment
@pedromss Привет, я просто хочу запустить все тестовые спецификации параллельно. Есть ли лучший способ сделать это?   -  person yay1    schedule 20.10.2017


Ответы (1)


Один из способов обойти это - поместить общее состояние во внешний объект:

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

По общему признанию, это в значительной степени взлом, и я не удивлюсь, если у scalatest есть способ справиться с этой встроенной функцией, о которой я не знаю.

person Joe K    schedule 11.09.2017
comment
Спасибо! Это лучшее решение, которое у меня есть на данный момент. Мы по-прежнему будем исследовать самый масштабный способ сделать это. - person yay1; 28.09.2017