Il modo previsto per farlo è quello di utilizzare suite nidificate. Suite ha un metodo nestedSuites che restituisce IndexedSeq [Suite] (in 2.0, in 1.9.1 era una List [Suite]). Suite ha anche un metodo runNestedSuites che è responsabile dell'esecuzione di eventuali suite nidificate. Per impostazione predefinita runNestedSuites chiama nestedSuites e su ogni Suite restituita invoca direttamente o, se viene passato un Distributore, mette le suite nidificate nel distributore in modo che possano essere eseguite in parallelo.
Quindi ciò che si vuole veramente fare è rendere Foo e Bar in classi, e restituire loro istanze dal metodo nestedSuites di EndpointTests. C'è una classe che rende facile quella Suite. Ecco un esempio di utilizzo:
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
}
}
Un potenziale problema, però, è che se si sta utilizzando la scoperta di trovare Suites per eseguire, tutti e tre EndpointTests, Foo e bar sarà scoperto. In ScalaTest 2.0 puoi annotare Foo e Bar con @DoNotDiscover e il Runner di ScalaTest non li scoprirà. Ma sbt lo farà ancora. Attualmente stiamo migliorando sbt in modo che passi su Suites altrimenti individuabili annotati con DoNotDiscover, ma questo sarà in 0.13 sbt, che non è ancora uscito. Nel frattempo puoi far sì che sbt li ignori aggiungendo un parametro costruttore inutilizzato a Foo e Bar.
fonte
2013-03-21 19:27:19
Vedere questa domanda/risposta (non proprio un duplicato) -> http: // stackoverflow.it/questions/8486869/org-scalatest-global-setup-like-beforeallsuites –
Controlla questo q/a: http://stackoverflow.com/questions/27272811/how-to-cut-a-long-scalatest-spec- to-pieces/27275814 Volevo mantenere il passo di inizializzazione come test stesso, con test dipendenti assicurandoti che l'inizializzazione fosse eseguita per prima, e cancellando se avesse fallito – akauppi