2017-02-27 1 views
0

Mon scénario pour le test est que je suit la hiérarchie:Comment exécuter BeforeAll et Afterall pour plusieurs suites dans Scalatest

AfterAll 
    AfterAll 
    Test Suite for Component 1 with multiple test cases 
    BeforeAll 
    AfterAll 
    Test Suite for Component 2 with multiple test cases 
    BeforeAll 
    AfterAll 
    Test Suite for Component 2 with multiple test cases 
    BeforeAll 
BeforeAll 

Maintenant, j'ai l'idée que je peux courir ma part d'installation avant et après une suite et chaque test, mais est-il un moyen que je peux exécuter ma configuration avant et après toutes les suites de test

+0

Etes-vous en train de dire que vous voulez avoir distinct 'beforeAll' et' afterAll' pour component1 et component 2? – prayagupd

+0

Non, je veux le même beforeAll et afterAll pour tous ces composants, et je vais avoir séparés beforeAll et afterAll ainsi, j'ai l'idée de comment mettre le dernier. –

+0

Ok, donc vous voulez commun 'beforeAll' et' afterAll' pour les deux aussi avec leurs individuels 'beforeAll' et' afterAll'. Je suppose que vous allez écrire 2 composants dans 2 fichiers de test différents, n'est-ce pas? – prayagupd

Répondre

1

Vous pouvez tirer parti de l'héritage pour reproduire la configuration à travers une variété de suites, il est légèrement manuel, mais il est une approche très commune .

trait DefaultSuite extends Suite with BeforeAndAfterAll with Informing { 
    override def beforeAll(): Unit = {..} 
    override def afterAll(): Unit = {..} 
} 


class Component1Tests extends FlatSpec with DefaultSuite {} 
class Component2Tests extends FlatSpec with DefaultSuite {} 
class Component3Tests extends FlatSpec with DefaultSuite {} 

Si vous voulez quelque chose qui ne s'exécute qu'une seule fois, avant et après, vous devez être un peu plus intelligent. Dans certains cas, un plugin SBT ou d'une tâche pour faire face aux scénarios les plus avancés, dans d'autres que vous faites quelque chose comme ceci:

object Singleton { 
    val dbConnection = DB(..) 
} 

trait DefaultSuite extends Suite with BeforeAndAfterAll with Informing { 
    def dbConnection: DB = Singleton.dbConnection 
} 

Alors implementors de votre DefaultSuite sera en mesure d'accéder à un tas de choses facilement, mais derrière la scènes il n'y a qu'une seule instance d'un objet particulier. J'ai utilisé cette technique avec succès dans le passé, où un singleton et un trait sont utilisés pour fournir un "faux" héritage, mais en réalité vous faites référence à la même instance d'objets différents.

+0

Je ne sais pas si je vous reçois complètement, en première partie, vous avez suggéré et commun beforeAll et AfterAll. Et dans la deuxième partie, vous m'avez montré que les tâches que je veux faire une seule fois pour une suite complète, je devrais utiliser un objet de Scala. Est-ce comme ça? –

+0

@SaquibGul non, je vous montre comment faire une fois par 'sbt: test' .. – flavian