Scalatest ou specs2 avec plusieurs cas de test
Question
Dans testng et Java, nous pouvons exécuter plusieurs cas de test à l'aide DataProvider, et ce fonctionne comme des tests séparés, ce qui signifie l'exécution d'un test n'est pas arrêté en cas d'échec. Y at-il un analogue pour ScalaTest ou les spécifications / Specs2?
La solution
Dans les deux ScalaTest et specs2, il est facile de créer des cas de test à l'exécution, afin de les paramétrer des données. Voici un exemple avec specs2:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, banana, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
Ensuite, la sortie est:
A basket must contain fruits
+ it contains: apple
+ it contains: banana
+ it contains: orange
Alors que la spécification suivante:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, cake, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
vous permet d'imprimer quelque chose comme:
A basket must contain fruits
+ it contains: apple
x it contains: cake
'basket' does not contain 'cake'
+ it contains: orange
Autres conseils
Ce concept est appelé « tests partagés » dans ScalaTest, parce que le même code de test est « partagée » par plusieurs appareils, où « luminaires » sont les « données » dans l'approche dataProvider TestNG. Il y a une façon de le faire pour chaque trait de style ScalaTest qui exprime des tests comme des fonctions. Voici un exemple pour WordSpec:
http://www.scalatest.org/scaladoc-1.6.1/ #org.scalatest.WordSpec@SharedTests
Vous pouvez encore utiliser simplement une boucle pour enregistrer le même code de test pour les points de données différentes. Cela est arrivé dans une discussion e-mail qui est ici:
http://groups.google.com/group/scalatest-users/browse_thread/ fil / 7337628407b48064 #
pour le code de la boucle dans ce cas ressemblait:
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)
}
}
}
enregistre en fait 15 tests, cinq essais pour chaque pilote de navigateur. Ce que je crois est ce que vous êtes après.