Sbtで実行することにより、単一のテストを実行できることを知っています。
testOnly *class -- -n Tag
タグなしで単一のテストを実行するようにsbt/scalatestに伝える方法はありますか?例えば:
testOnly *class -- -X 2
「クラスの2番目のテストを実行します。それが何であれ」ということです。私たちにはたくさんのテストがあり、誰もタグ付けする手間がありません。タグがなくても単一のテストを実行する方法はありますか?
これは(ScalaTest 2.1.3以降)以下でサポートされています:
testOnly *MySuite -- -z foo
名前にサブストリング「foo」が含まれるテストのみを実行します。
部分文字列ではなく完全一致には、-t
の代わりに-z
を使用します。
テストクラス内でタグなしのテストを1つ実行する方法はわかりませんが、この質問に出くわした人にとって役立つと思われるワークフローを提供しています。
Sbtセッション内から:
test:testOnly *YourTestClass
(アスタリスクはワイルドカードです。フルパスcom.example.specs.YourTestClass
を指定できます。)
そのテストクラス内のすべてのテストが実行されます。おそらく、テストの失敗に最も関心があるので、失敗した実装を修正してから実行します。
test:testQuick
...失敗したテストのみを実行します。 (この場合、最後に実行されたtest:testOnly
コマンドの繰り返しはtest:testQuick
と同じですが、テストメソッドを適切なテストクラスに分割する場合、ワイルドカードを使用してtest:testQuick
を作成できます。失敗したテストを再実行するより効率的な方法。)
ScalaTestのテストの命名法は、特定のテストメソッドではなくテストクラスであるため、すべてのタグなしメソッドが実行されることに注意してください。
テストクラスにテストメソッドが多すぎる場合、それらを別々のクラスに分割するか、適切にタグ付けします。 (これは、テスト対象のクラスが 単一責任原則 に違反しており、リファクタリングを使用できることを示すシグナルである可能性があります。)
タイラーの例を単純化するために。
test:
- prefixは不要です。
彼の例によると:
sbt
- consoleで:
testOnly *LoginServiceSpec
そして、ターミナルで:
sbt "testOnly *LoginServiceSpec"