W TestNg i Javie, możemy uruchomić wiele przypadków testowych przy użyciu DataProvider, a to działa jako oddzielne testy, co oznacza, że wykonanie testu nie jest zatrzymywane w przypadku niepowodzenia. Czy istnieje odpowiednik dla ScalaTest lub Specs/Specs2?Scalatest lub specs2 z wieloma testami
Odpowiedz
Zarówno w ScalaTest, jak i specs2, łatwo jest tworzyć przypadki testowe w czasie wykonywania, aby sparametryzować je danymi. Oto przykład z specs2:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, banana, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
to wyjście jest:
A basket must contain fruits
+ it contains: apple
+ it contains: banana
+ it contains: orange
Zważywszy następującej specyfikacji:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, cake, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
wypisze coś takiego:
A basket must contain fruits
+ it contains: apple
x it contains: cake
'basket' does not contain 'cake'
+ it contains: orange
Zapoznaj się z moim pytaniem. Twoja metoda działa jako JEDEN test, co oznacza, że awaria w jednym przypadku jest niepowodzeniem testu. w TestNg, byłby uruchamiany jako trzy testy, a więc informacja o błędzie ma znaczenie – user44242
Niestety, nie wynikało to ze specyfikacji, że faktycznie tworzy 3 testy. Dodałem dane wyjściowe, aby to pokazać. – Eric
Zobacz zaktualizowaną składnię: http://etorreborre.github.io/specs2/guide/org.specs2.guide.Matchers.html#With+sequences –
Ta koncepcja nazywa się "shar ed testy "w ScalaTest, ponieważ ten sam kod testowy jest" współdzielony "przez wiele urządzeń, gdzie" urządzenia "są" danymi "w podejściu DataProvider firmy TestNG. Istnieje sposób, aby to zrobić dla każdej cechy stylu w ScalaTest, która wyraża testy jako funkcje. Oto przykład dla WordSpec:
http://www.scalatest.org/scaladoc-1.6.1/#[email protected]
Można alternatywnie po prostu użyć pętli for, aby zarejestrować ten sam kod testowy dla różnych punktów danych. Ten wpadł w dyskusji e-mail, który jest tutaj:
http://groups.google.com/group/scalatest-users/browse_thread/thread/7337628407b48064#
kodu pętli w tej sprawie wyglądała:
for (browser <- List("IE", "Chrome", "Firefox")) {
test(browser + ": test one") { driver =>
info("Testing using " + driver)
}
test(browser + ": test two") { driver =>
info("Testing using " + driver)
}
test(browser + ": test three") { driver =>
info("Testing using " + driver)
}
test(browser + ": test four") { driver =>
info("Testing using " + driver)
}
test(browser + ": test five") { driver =>
info("Testing using " + driver)
}
}
}
to faktycznie rejestruje 15 testów, pięć testów dla każdego kierowcy przeglądarki. Uważam, że to jest to, o co prosisz.
Pytanie jest mylące. Podaj przykład tego, co masz na myśli. –