2011-08-17 8 views
5

Comme le titre, je me demande s'il est possible de fournir des "hypothèses" à Scalatest lors de la définition d'un cas de test particulier. Les hypothèses dans ce contexte seraient des conditions préalables pour un test, de sorte que si l'hypothèse était évaluée à false, le test serait ignoré plutôt qu'exécuté (et traité en conséquence par les coureurs). Dans ce cas particulier, je pense aux dépendances entre les tests - il peut donc y avoir un test de base qui valide si une méthode retourne , suivie par des tests ultérieurs qui explorent les spécificités de la réponse. Si le premier test échoue, je préférerais que le dernier test soit marqué comme «non exécutable» d'une manière ou d'une autre, plutôt que de le faire échouer aussi. Cela dit, je peux imaginer utiliser à l'avenir pour définir certaines conditions préalables non connectées (comme le disque dur doit avoir au moins 20 Mo d'espace libre), donc s'il y a une manière générale de skippin un test à l'exécution (par opposition à en utilisant ignore ou pending) Je préférerais entendre cela.Est-ce que Scalatest prend en charge les hypothèses?

La syntaxe spécialisée est la bienvenue, bien que si je dois lancer manuellement un certain type d'exception, c'est aussi OK.

+0

Comment voulez-vous que le test soit signalé? Comme ignoré, en attente, succès, échec? –

+0

Je voudrais aussi cela. Le cas d'utilisation est de remplir une base de données avec des trucs de test; si cela échoue, les tests (pas tous) qui seraient en train de lire à partir de la base de données ne devraient pas être exécutés. Je préférerais les signaler comme "ignorés". – akauppi

Répondre

5

ScalaTest 2.0 (je pense) a ajouté le support pour les hypothèses:

Assertions fournit également trait des méthodes qui vous permettent d'annuler un test. Vous annuleriez un test si une ressource requise par le test n'était pas disponible. Par exemple, si un test nécessite la mise en ligne d'une base de données externe et que ce n'est pas le cas, le test peut être annulé pour indiquer qu'il n'a pas pu être exécuté en raison de la base de données manquante. Un tel test suppose une base de données est disponible, et vous pouvez utiliser la méthode suppose pour indiquer au début de l'essai, comme ceci:

assume(database.isAvailable) 

http://www.scalatest.org/user_guide/using_assertions

+0

imho, cela devrait être la bonne réponse – akauppi

+0

@akauppi Je suis d'accord. Alors maintenant c'est. :) –

1

Scalacheck, qui est souvent utilisé en combinaison avec scalatest, peut le faire:

import org.scalacheck._ 

object XSpecifictaion extends Properties ("X") { 

    property ("sample (a - b)") = Prop.forAll { (a: Int, b: Int) => 
     (a < b || (a - b >= 0)) } 
} 

! (a < b) est votre hypothèse, et (a - b> = 0) le test réel; vous n'effectuez ce dernier que si l'hypothèse est vraie, donc vous annulez votre hypothèse et vous la combinez avec un raccourci-OU.

Questions connexes