2017-09-11 3 views
2

Je codes scalatest comme suit:Comment initialiser les variables partagées avant le test parallèle dans 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) 
    } 
} 

Les deux tests ne peuvent pas imprimer la testSuiteId que je produis devant eux. Au lieu de cela, ils régénèrent l'identifiant et l'impriment. Je comprends qu'en raison de ParallelTestExecution qui s'étend OneInstancePerTest, chaque test fonctionne ici sur sa propre instance et une copie de la variable « testSuiteId ».

Mais je veux un code fixe pour cette suite de tests et chaque cas de test dans cette suite ont accès à ce fixe sans le modifier. J'ai essayé de créer l'identifiant fixe dans BeforeAll {} mais cela n'a pas fonctionné.

Comment dois-je obtenir ce que je veux?

+0

Pourquoi avez-vous besoin 'ParallelTestExecution'? – pedromss

+0

@pedromss Salut, je veux juste exécuter toutes les spécifications de test en parallèle. Y a-t-il une meilleure façon de faire cela? – yay1

Répondre

0

Une façon de contourner le problème serait de mettre l'état partagé dans une sorte d'objet externe:

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

Il est vrai que cela est très bien un hack, et je ne serais pas surpris si scalatest a façon de gérer ce built-in dont je ne suis pas au courant.

+0

Merci! C'est la meilleure solution que j'ai jusqu'à présent. Je ferai toujours des recherches sur la façon la plus graduelle de le faire. – yay1