Der beabsichtigte Weg, dies zu tun, besteht darin, verschachtelte Suiten zu verwenden. Suite verfügt über eine nestedSuites-Methode, die eine IndexedSeq [Suite] zurückgibt (in 2.0 war es in 1.9.1 eine List [Suite]). Suite verfügt außerdem über eine runNestedSuites-Methode, die für die Ausführung verschachtelter Suites verantwortlich ist. Standardmäßig ruft runNestedSuites nestedSuites auf und ruft bei jeder zurückgegebenen Suite entweder direkt run auf, oder wenn ein Distributor übergeben wird, werden die verschachtelten Suites im Distributor abgelegt, damit sie parallel ausgeführt werden können.
Was Sie also wirklich wahrscheinlich tun möchten, ist, Foo und Bar zu Klassen zu machen und Instanzen davon von der nestedSuites-Methode von EndpointTests zurückzugeben. Es gibt eine Klasse namens Suites, die das so einfach macht. Hier ist ein Beispiel für seine Verwendung:
import org.scalatest._
import matchers.MustMatchers
class Foo extends FunSpec with MustMatchers {
describe("Message here...") {
it("Must do something") { }
it("Must be ok") { }
}
}
class Bar extends FunSpec with MustMatchers {
describe("Hello you...") {
it("One more!") { }
}
}
class EndpointTests extends Suites(new Foo, new Bar) with BeforeAndAfterAll {
override def beforeAll(configMap: Map[String, Any]) {
println("Before!")
}
override def afterAll(configMap: Map[String, Any]) {
println("After!")
}
}
Ein potenzielles Problem besteht jedoch darin, dass alle drei EndpointTests, Foo und Bar erkannt werden, wenn Sie mithilfe der Ermittlung Suites zum Ausführen finden. In ScalaTest 2.0 können Sie Foo und Bar mit @DoNotDiscover mit Anmerkungen versehen, und ScalaTests Runner erkennt sie nicht. Aber sbt wird es immer noch. Wir verbessern derzeit sbt so, dass es ansonsten erkennbare Suiten übergibt, die mit DoNotDiscover kommentiert sind. Dies wird jedoch in sbt 0.13 sein, was noch nicht veröffentlicht wurde. In der Zwischenzeit können Sie sbt dazu bringen, sie zu ignorieren, indem Sie Foo und Bar einen nicht verwendeten Konstruktorparameter hinzufügen.