web-dev-qa-db-fra.com

ScalaTest in sbt: existe-t-il un moyen d'exécuter un seul test sans balises?

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?

130
Nacht

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.

183
Seth Tisue

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):

Play Project

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"
78
Tyler

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.)

45
cfeduke

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"
4
pme