Je sais qu’un seul test peut être exécuté en exécutant, sbt,
testOnly *class -- -n Tag
Existe-t-il un moyen de dire à sbt/scalatest de lancer un seul test sans balises? Par exemple:
testOnly *class -- -X 2
cela signifierait "exécuter le deuxième test de la classe. Quoi que ce soit". Nous avons un tas de tests et personne ne s'est donné la peine de les étiqueter. Y a-t-il moyen de faire un seul test sans qu'il y ait une balise?
Ceci est maintenant supporté (depuis ScalaTest 2.1.3) avec:
testOnly *MySuite -- -z foo
pour n'exécuter que les tests dont le nom inclut la sous-chaîne "foo".
Pour une correspondance exacte plutôt que sous-chaîne, utilisez -t
au lieu de -z
.
Je voulais ajouter un exemple concret pour accompagner les autres réponses
Vous devez spécifier le nom de la classe que vous voulez tester, donc si vous avez le projet suivant (c'est un projet Play):
Vous pouvez tester uniquement les tests Login
en exécutant la commande suivante à partir de la console SBT:
test:testOnly *LoginServiceSpec
Si vous exécutez la commande en dehors de la console SBT, procédez comme suit:
sbt "test:testOnly *LoginServiceSpec"
Je ne vois pas le 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 à quiconque se heurte à cette question.
A partir d'une session sbt:
test:testOnly *YourTestClass
(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 seront exécutés. Vraisemblablement, l'échec des tests vous préoccupe le plus. Corrigez toutes les implémentations qui échouent, puis exécutez:
test:testQuick
... qui n'exécutera que les tests qui ont échoué. (Répéter la dernière exécution test:testOnly
La commande sera la même que test: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 créer test:testQuick
un moyen plus efficace de réexécuter les tests ayant échoué.)
Notez que la nomenclature de test dans ScalaTest est une classe de test et non une méthode de test spécifique. Par conséquent, toutes les méthodes non balisé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 sous test enfreint principe de responsabilité unique et pourrait utiliser un refactoring.)
Juste pour simplifier l'exemple de Tyler.
test:
- le préfixe n'est pas nécessaire.
Donc, selon son exemple:
Dans la console sbt
-:
testOnly *LoginServiceSpec
Et dans le terminal:
sbt "testOnly *LoginServiceSpec"