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.
Etes-vous en train de dire que vous voulez avoir distinct 'beforeAll' et' afterAll' pour component1 et component 2? – prayagupd
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. –
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