Okay, jak wspomniano w moim komentarzu, faktycznie miałem ten sam problem. Musiałem przetestować niefiltrowane punkty końcowe, a najlepszym sposobem dla każdej specyfikacji było uruchomienie niefiltrowanego serwera z jednym punktem końcowym, uruchomienie specyfikacji, a następnie zamknięcie serwera. Aby to osiągnąć, najpierw zdefiniowano specyfikacji bazowy podobny do tego:
import org.specs2.mutable.Specification
abstract class SpecificationBase extends Specification{
//Do setup work here
step{
println("Doing setup work...")
success
}
//Include the real spec from the derived class
include(spec)
//Do shutdown work here
step{
println("Doing shutdown work...")
success
}
/**
* To be implemented in the derived class. Returns the real specification
* @return Specification
*/
def spec:Specification
}
Zasadniczo, ta klasa podstawy składającą kompletny opis jako etap ustawiania i etap teardown z rzeczywistym opisie (zdefiniowaną w konkretnej klasy specyfikacji) wciśnięty w środku. Więc badanie przy użyciu tej klasy bazowej będzie wyglądać następująco:
class MySpec extends SpecificationBase{ def spec =
new Specification{
"A request to do something" should{
"be successful in case 1" in {
println("Testing case 1")
success
}
"be successful in case 2" in {
println("Testing case 2")
success
}
}
}
}
Po uruchomieniu tego widać:
Doing setup work...
Testing case 1
Testing case 2
Doing shutdown work...
To nie jest idealne, ale to działa. Czy istnieje inny (i możliwy do czyszczenia/lepszy) sposób, aby to zrobić? Prawdopodobnie, ale jest to jedno rozwiązanie, które można rozważyć przy użyciu.
[Przewiń stronę doc til Przed/Po pkt] (http://etorreborre.github.io/specs2/guide/org.specs2 .guide.Structure.html) –
@ om-nom-nom Wyjaśnia tylko, jak wykonać kod wokół każdego przypadku. – lambdas
whoops, miałem na myśli akapit "Template" lub "Global setup/teardown" (ten z instalacją/czyszczeniem bazy danych) :-) –