10
votes

Test de plusieurs ensembles de données avec ScalAtest

Y a-t-il un moyen pratique d'exécuter des tests sur plusieurs ensembles de données - comme dans les tests paramétrés de Junit?


1 commentaires

Je jetterais un coup d'œil à Scalacheck, qui peut être utilisé à partir de Scalatest.


3 Réponses :


6
votes

Les tests partagés peuvent être intéressants pour vous. Ils vous permettent de définir un ensemble de tests comme dans cet exemple de pile: xxx

, puis dans la spécification réelle, vous pouvez l'utiliser comme ceci: xxx

Ainsi, en d'autres termes, NONENTTYSTACK est un ensemble paramétré de tests que vous pouvez utiliser avec différents ensembles de données que vous souhaitez tester.


0 commentaires

12
votes

Il existe une nouvelle fonctionnalité pour tester plusieurs ensembles de données provenant de Scalatest 1.5, que vous pouvez actuellement essayer en instantané. Il est publié à Scala-Tools.org:

group ID: org.scalatest Artefact ID: Scalatest Version: 1.5-Snapshot

Vous mélangez (ou importez les membres de) TabledRivenProperTyChecks, vous pouvez définir des tables telles que ceci: xxx

vous passez un Var Arg Liste des tuples à la table. Chaque tuple doit avoir la même arité, dans ce cas, chaque tuple a ARITY 4 (4 membres). Le premier tuple est toutes des cordes et ces noms définissent les colonnes. Les tuples suivants définissent chacun une ligne de données. Vous pouvez mettre n'importe quel type dans le tuple, mais en général, chaque colonne contiendrait le même type. Bien que si vous vouliez que vous puissiez avoir des colonnes de type qui peuvent contenir quoi que ce soit. Vous pouvez avoir une table avec 1 à 22 colonnes. Si vous avez besoin de plus de 22 colonnes (la taille maximale du tuple dans Scala est actuellement 22), ce que vous pouviez faire est d'utiliser un type composé dans une ou plusieurs colonnes.

Une fois que vous avez une table, vous pouvez vérifier Ils avec Forall comme ceci: xxx

Forall prend deux listes de paramètres. Le premier est une table et la seconde est une "fonction de propriété", qui exprime quelque chose qui devrait être vrai pour chaque rangée de la table. For'all prendra chaque rangée de la table (sauter la ligne de rubrique de noms de colonne, bien sûr) et assurez-vous que la propriété est tirée. Si ce n'est pas le cas, vous obtenez un bon message d'erreur indiquant quelle ligne de la table a échoué, quelles sont les valeurs des colonnes nommées, etc.

une table est un SEQ des tuples de données, de sorte que vous peut aussi l'utiliser comme un SEQ. Par exemple, vous pouvez obtenir un SEQ d'option [exception] indiquant quelles lignes ont échoué comme ceci: xxx

La SEQ résultante contient une option pour chaque ligne de données dans la table, Ce qui n'est rien si la propriété est passée pour cette ligne et une [exception] si la propriété a échoué. L'exception dans certains contient tous les détails sur l'échec.


0 commentaires

7
votes

Une autre possibilité pour des tests axés sur les données consiste à utiliser la syntaxe suivante: xxx

tests par défaut exécuté en parallèle, sauf si vous avez défini parallelElallexecution dans Test: = Faux .


0 commentaires