Je sais qu'un seul test peut être exécuté en exécutant, dans sbt,
testOnly *class -- -n Tag
Existe-t-il un moyen de dire à sbt / scalatest d'exécuter un seul test sans balises? Par exemple:
testOnly *class -- -X 2
cela signifierait "exécuter le deuxième test de la classe. Quoi qu'il en soit". Nous avons un tas de tests et personne n'a pris la peine de les étiqueter, alors y a-t-il un moyen d'exécuter un seul test sans qu'il ait une étiquette?
sbt
entre guillemets , par exemplesbt "test-only *SingleTestSuite"
Réponses:
Ceci est désormais pris en charge (depuis ScalaTest 2.1.3) en mode interactif:
pour exécuter uniquement les tests dont le nom inclut la sous-chaîne "foo".
Pour une correspondance exacte plutôt qu'une sous-chaîne, utilisez à la
-t
place de-z
.la source
-t
pour la correspondance exacte? Je suis incapable de le faire fonctionner.src/it
), ils doivent précédezit
àtestOnly
. Par exemple, sur la ligne de commande:sbt "it:testOnly *MyIntegrationTestSuite"
.when
etshould
peuvent se répéter entre les tests. Pour choisir un test spécifique, je dois dire "le nom contient ceci ET cela".Je voulais ajouter un exemple concret pour accompagner les autres réponses
Vous devez spécifier le nom de la classe que vous souhaitez tester, donc si vous avez le projet suivant (il s'agit d'un projet Play):
Vous pouvez tester uniquement les
Login
tests en exécutant la commande suivante à partir de la console SBT:Si vous exécutez la commande depuis l'extérieur de la console SBT, procédez comme suit:
la source
sbt "test:testOnly *LoginServiceSpec"
testOnly *LoginServiceSpec
sbt "testOnly *LoginServiceSpec"
Je ne vois pas de moyen d'exécuter un seul test non étiqueté dans une classe de test, mais je fournis mon flux de travail car il semble être utile pour quiconque se heurte à cette question.
Depuis une session sbt:
(L'astérisque est un caractère générique, vous pouvez spécifier le chemin complet
com.example.specs.YourTestClass
.)Tous les tests de cette classe de test seront exécutés. Vous êtes probablement plus préoccupé par les tests échoués, alors corrigez toutes les implémentations défaillantes, puis exécutez:
... qui n'exécutera que les tests qui ont échoué. (La répétition de la
test:testOnly
commande la plus récemment exécutée sera la même quetest:testQuick
dans ce cas, mais si vous divisez vos méthodes de test en classes de test appropriées, vous pouvez utiliser un caractère générique pour rendretest:testQuick
plus efficace la manière de réexécuter les tests qui ont échoué.)Notez que la nomenclature des tests dans ScalaTest est une classe de test, pas une méthode de test spécifique, donc toutes les méthodes non marquées sont exécutées.
Si vous avez trop de méthodes de test dans une classe de test, divisez-les en classes séparées ou étiquetez-les de manière appropriée. (Cela pourrait indiquer que la classe testée est en violation du principe de responsabilité unique et pourrait utiliser une refactorisation.)
la source
*YourTestClass
doit être le nom de la classe. Pas le nom du fichier.Juste pour simplifier l'exemple de Tyler.
test:
-prefix n'est pas nécessaire.Donc selon son exemple:
Dans la
sbt
-console:Et dans le terminal:
la source
Voici la page Scalatest sur l' utilisation du runner et la discussion approfondie sur les options
-t
et-z
.Cet article montre quelles commandes fonctionnent pour un fichier de test qui utilise
FunSpec
.Voici le fichier de test:
Cette commande exécute les quatre tests du
iLike
bloc describe (à partir de la ligne de commande SBT):Vous pouvez également utiliser des guillemets, cela fonctionnera donc également:
Cela exécutera un seul test:
Cela exécutera les deux tests qui commencent par "fonctionne avec":
Je ne peux pas avoir la
-t
possibilité d'exécuter des tests dans leCardiBSpec
fichier. Cette commande n'exécute aucun test:Il semble que l'
-t
option fonctionne lorsque les tests ne sont pas imbriqués dans desdescribe
blocs. Jetons un œil à un autre fichier de test:-t
peut être utilisé pour exécuter le test unique:-z
peut également être utilisé pour exécuter le test unique:Consultez ce dépôt si vous souhaitez exécuter ces exemples.
la source