ScalaTest o specs2 con più casi di test
Domanda
In TestNG e Java, siamo in grado di eseguire più casi di test che utilizzano DataProvider, e questo viene eseguito come test separati, cioè l'esecuzione di un test non viene fermato in caso di fallimento. Esiste un analogo per ScalaTest o Spec / Specs2?
Soluzione
In entrambi ScalaTest e specs2, è facile creare casi di test in fase di esecuzione, al fine di parametrizzare loro dati. Ecco un esempio con specs2:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, banana, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
L'uscita è:
A basket must contain fruits
+ it contains: apple
+ it contains: banana
+ it contains: orange
considerando che le seguenti specifiche:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, cake, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
stamperà qualcosa come:
A basket must contain fruits
+ it contains: apple
x it contains: cake
'basket' does not contain 'cake'
+ it contains: orange
Altri suggerimenti
Questo concetto è chiamato "test condivisi" in ScalaTest, perché lo stesso codice di prova è "condivisa" da più dispositivi, in cui "apparecchi" sono i "dati" nell'approccio DataProvider di TestNG. C'è un modo per fare questo per ogni tratto di stile nella ScalaTest che esprime i test come funzioni. Ecco un esempio per WordSpec:
http://www.scalatest.org/scaladoc-1.6.1/ #org.scalatest.WordSpec@SharedTests
E 'possibile in alternativa, basta usare un ciclo for per registrare lo stesso codice di prova per i diversi punti di dati. Ciò è avvenuto in una discussione e-mail che è qui:
http://groups.google.com/group/scalatest-users/browse_thread/ filo / 7337628407b48064 #
Il codice ciclo in quel caso sembrava:
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)
}
}
}
Ciò registra in realtà 15 test, cinque prove per ogni driver del browser. Questo credo sia quello che stai cercando.