これを行うための意図された方法は、ネストされたスイートを使用することです。Suite には、IndexedSeq[Suite] を返すネストされたSuites メソッドがあります (2.0 では、1.9.1 では List[Suite] でした)。Suite には、ネストされたスイートの実行を担当する runNestedSuites メソッドもあります。デフォルトでは、runNestedSuites は nestedSuites を呼び出し、返された Suite ごとに run を直接呼び出すか、Distributor が渡された場合は、ネストされたスイートをディストリビューターに配置して、並列で実行できるようにします。
したがって、おそらく本当にやりたいことは、Foo と Bar をクラスにして、EndpointTests の nestedSuites メソッドからそれらのインスタンスを返すことです。それを楽にしてくれるスイーツというクラスがあります。その使用例を次に示します。
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!") // start up your web server or whatever
}
override def afterAll(configMap: Map[String, Any]) {
println("After!") // shut down the web server
}
}
ただし、1 つの潜在的な問題は、実行するスイートを検出するために検出を使用している場合、EndpointTests、Foo、および Bar の 3 つすべてが検出されることです。ScalaTest 2.0 では、@DoNotDiscover で Foo と Bar にアノテーションを付けることができ、ScalaTest の Runner はそれらを発見しません。しかし、sbt はまだそうするでしょう。私たちは現在、sbt を拡張して、DoNotDiscover のアノテーションが付けられた他の方法で検出可能なスイートを通過するようにしていますが、これはまだリリースされていない sbt 0.13 になります。当面は、未使用のコンストラクタ パラメータを Foo と Bar に追加することで、sbt にそれらを無視させることができます。