Ich weiß, dass ein einzelner Test ausgeführt werden kann, indem in sbt,
testOnly *class -- -n Tag
Gibt es eine Möglichkeit, sbt / scalatest anzuweisen, einen einzelnen Test ohne Tags auszuführen? Beispielsweise:
testOnly *class -- -X 2
es würde bedeuten "den zweiten Test in der Klasse durchführen. Was auch immer es ist". Wir haben eine Reihe von Tests, und niemand hat sich die Mühe gemacht, sie zu markieren. Gibt es also eine Möglichkeit, einen einzelnen Test ohne Tag durchzuführen?
sbt
in Anführungszeichen setzen müssen , z. B.sbt "test-only *SingleTestSuite"
Antworten:
Dies wird jetzt (seit ScalaTest 2.1.3) im interaktiven Modus unterstützt:
um nur die Tests auszuführen, deren Name den Teilstring "foo" enthält.
Verwenden Sie
-t
anstelle von Teilzeichenfolge anstelle von Teilzeichenfolge anstelle von-z
.quelle
-t
für eine genaue Übereinstimmung verwendet wird? Ich kann es nicht zum Laufen bringen.src/it
müssen sie) zu prependit
zutestOnly
. Zum Beispiel in der Kommandozeile :sbt "it:testOnly *MyIntegrationTestSuite"
.when
undshould
können zwischen diesen wiederholt werden. Um einen bestimmten Test auszuwählen, muss ich sagen "Name enthält dies UND das".Ich wollte ein konkretes Beispiel hinzufügen, um die anderen Antworten zu begleiten
Sie müssen den Namen der Klasse angeben, die Sie testen möchten. Wenn Sie also das folgende Projekt haben (dies ist ein Play-Projekt):
Sie können nur die
Login
Tests testen , indem Sie den folgenden Befehl über die SBT-Konsole ausführen:Wenn Sie den Befehl von außerhalb der SBT-Konsole ausführen, gehen Sie wie folgt vor:
quelle
sbt "test:testOnly *LoginServiceSpec"
testOnly *LoginServiceSpec
und außerhalb:sbt "testOnly *LoginServiceSpec"
Ich sehe keine Möglichkeit, einen einzelnen Test ohne Tags innerhalb einer Testklasse auszuführen, aber ich biete meinen Workflow an, da er für jeden nützlich zu sein scheint, der auf diese Frage stößt.
Aus einer sbt-Sitzung heraus:
(Das Sternchen ist ein Platzhalter. Sie können den vollständigen Pfad angeben
com.example.specs.YourTestClass
.)Alle Tests innerhalb dieser Testklasse werden ausgeführt. Vermutlich sind Sie am meisten mit fehlgeschlagenen Tests beschäftigt. Korrigieren Sie daher alle fehlgeschlagenen Implementierungen und führen Sie dann Folgendes aus:
... die nur fehlgeschlagene Tests ausführen. (Das Wiederholen des zuletzt ausgeführten
test:testOnly
Befehls ist dasselbe wietest:testQuick
in diesem Fall. Wenn Sie Ihre Testmethoden jedoch in geeignete Testklassen aufteilen, können Sie einen Platzhalter verwenden, umtest:testQuick
fehlerhafte Tests effizienter erneut auszuführen.)Beachten Sie, dass die Nomenklatur für den Test in ScalaTest eine Testklasse und keine bestimmte Testmethode ist, sodass alle Methoden ohne Tags ausgeführt werden.
Wenn Sie zu viele Testmethoden in einer Testklasse haben, teilen Sie diese in separate Klassen auf oder kennzeichnen Sie sie entsprechend. (Dies könnte ein Signal dafür sein, dass die getestete Klasse gegen das Prinzip der Einzelverantwortung verstößt und ein Refactoring verwenden könnte.)
quelle
*YourTestClass
muss Klassenname sein. Kein Dateiname.Nur um das Beispiel von Tyler zu vereinfachen.
test:
-prefix wird nicht benötigt.Also nach seinem Beispiel:
In der
sbt
Konsole:Und im Terminal:
quelle
Hier ist die Scalatest-Seite zur Verwendung des Läufers und die ausführliche Diskussion über die
-t
und-z
Optionen .Dieser Beitrag zeigt, welche Befehle für eine verwendete Testdatei funktionieren
FunSpec
.Hier ist die Testdatei:
Dieser Befehl führt die vier Tests im
iLike
Beschreibungsblock aus (über die SBT-Befehlszeile):Sie können auch Anführungszeichen verwenden, damit dies auch funktioniert:
Dadurch wird ein einzelner Test ausgeführt:
Dadurch werden die beiden Tests ausgeführt, die mit "funktioniert mit" beginnen:
Ich kann
-t
keine Tests in derCardiBSpec
Datei ausführen . Dieser Befehl führt keine Tests aus:Die
-t
Option funktioniert anscheinend, wenn Tests nicht indescribe
Blöcken verschachtelt sind. Schauen wir uns eine andere Testdatei an:-t
kann verwendet werden, um den einzelnen Test auszuführen:-z
kann auch verwendet werden, um den einzelnen Test auszuführen:Sehen Sie sich dieses Repo an, wenn Sie diese Beispiele ausführen möchten.
quelle