2011-07-24 15 views
9

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

+0

Pytanie jest mylące. Podaj przykład tego, co masz na myśli. –

Odpowiedz

24

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 
+0

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

+0

Niestety, nie wynikało to ze specyfikacji, że faktycznie tworzy 3 testy. Dodałem dane wyjściowe, aby to pokazać. – Eric

+0

Zobacz zaktualizowaną składnię: http://etorreborre.github.io/specs2/guide/org.specs2.guide.Matchers.html#With+sequences –

9

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.