Czy istnieje jakiś preferowany sposób zaprojektowania testu Specs2, z wieloma testami, które zależą od wyników poprzednich testów?W jaki sposób zaprojektować test bazy danych Specs2, z niezależnymi testami?
Poniżej znajduje się mój obecny zestaw testów. Nie podoba mi się var
s pomiędzy fragmentami testowymi. Są jednak "potrzebne", ponieważ niektóre testy generują numery identyfikacyjne, które ponownie wykorzystują testy.
Czy powinienem raczej zapisać numery identyfikacyjne w kontekście Specs2, czy utworzyć oddzielny obiekt, który przechowuje wszystkie zmienne ustawienia? I umieść tylko fragmenty testowe w obiekcie specyfikacji? A może jest jeszcze lepsze podejście?
Jeśli test się nie powiedzie, chciałbym anulować pozostały test na tej samej głębokości. Czy mogę sprawić, aby fragmenty testowe były od siebie zależne? (Wiem, że mogę anulować pozostałe dopasowujących w jednym fragmencie testowego (przy użyciu testów zmienny lub poprzez orSkip), ale to, co o anulowanie całych fragmentów?)
.
object DatabaseSpec extends Specification {
sequential
"The Data Access Object" should {
var someId = "" // These var:s feels error prone, is there a better way?
"save an object" >> {
someId = database.save(something)
someId must_!= ""
// I'd like to cancel the remaining tests, below, at this "depth",
// if this test fragmen fails. Can I do that?
// (That is, cancel "load one object", "list all objects", etc, below.)
}
"load one object" >> {
anObject = database.load(someId)
anObject.id must_== someId
}
"list all objects" >> {
objs = database.listAll()
objs.find(_.id == someId) must beSome
}
var anotherId = ""
...more tests that create another object, and
...use both `someId` and `anotherId`...
var aThirdId = ""
...tests that use `someId`, `anotherId` and `aThirdId...
}
"The Data Access Object can also" >> {
...more tests...
}
}
Specyfikacja BTW specs2 3.x została zaprojektowana w celu rozwiązania tego problemu, w którym można tworzyć dowolne testy opierające się na wynikach poprzednich testów. Zobacz tutaj: https://etorreborre.github.io/specs2/guide/SPECS2-3.1.1/org.specs2.guide.CreateOnlineSpecifications.html – Eric