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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top