sbtで実行することにより、単一のテストを実行できることを私は知っています。
testOnly *class -- -n Tag
タグなしで単一のテストを実行するようにsbt/scalatestに指示する方法はありますか?例えば:
testOnly *class -- -X 2
それは「クラスで2番目のテストを実行する。それが何であれ」を意味します。たくさんのテストがあり、誰もそれらにタグを付ける必要はありません。タグなしで単一のテストを実行する方法はありますか?
これは、インタラクティブモードで(ScalaTest 2.1.3以降)サポートされるようになりました。
testOnly *MySuite -- -z foo
名前に部分文字列「foo」が含まれるテストのみを実行します。
部分文字列ではなく完全に一致させるには、-t
の代わりにを使用し-z
ます。
テストクラス内でタグなしの単一のテストを実行する方法がわかりませんが、この質問に遭遇した人には役立つと思われるワークフローを提供しています。
sbtセッション内から:
test:testOnly *YourTestClass
(アスタリスクはワイルドカードです。フルパスを指定できますcom.example.specs.YourTestClass
。)
そのテストクラス内のすべてのテストが実行されます。おそらく、テストの失敗に最も関心があるので、失敗した実装を修正してから、以下を実行します。
test:testQuick
...失敗したテストのみを実行します。(最後に実行されたコマンドを繰り返すことはこの場合test:testOnly
と同じですが、テストメソッドを適切なテストクラスに分割すると、ワイルドカードを使用して、失敗したテストをより効率的に再実行できます。)test:testQuick
test:testQuick
ScalaTestのテストの命名法はテストクラスであり、特定のテストメソッドではないため、タグなしのすべてのメソッドが実行されることに注意してください。
テストクラスにテストメソッドが多すぎる場合は、それらを別々のクラスに分割するか、適切にタグ付けします。(これは、テスト対象のクラスが単一責任の原則に違反しており、リファクタリングを使用している可能性があることを示している可能性があります。)
タイラーの例を単純化するためだけに。
test:
-プレフィックスは必要ありません。
だから彼の例によると:
-consoleのsbt
場合:
testOnly *LoginServiceSpec
そしてターミナルで:
sbt "testOnly *LoginServiceSpec"
これは、ランナーの使用に関するScalatestページと、およびオプションに関する-t
-z
詳細な説明です。
この投稿では、を使用するテストファイルでどのコマンドが機能するかを示していますFunSpec
。
テストファイルは次のとおりです。
package com.github.mrpowers.scalatest.example
import org.scalatest.FunSpec
class CardiBSpec extends FunSpec {
describe("realName") {
it("returns her birth name") {
assert(CardiB.realName() === "Belcalis Almanzar")
}
}
describe("iLike") {
it("works with a single argument") {
assert(CardiB.iLike("dollars") === "I like dollars")
}
it("works with multiple arguments") {
assert(CardiB.iLike("dollars", "diamonds") === "I like dollars, diamonds")
}
it("throws an error if an integer argument is supplied") {
assertThrows[java.lang.IllegalArgumentException]{
CardiB.iLike()
}
}
it("does not compile with integer arguments") {
assertDoesNotCompile("""CardiB.iLike(1, 2, 3)""")
}
}
}
iLike
このコマンドは、 (SBTコマンドラインからの)describeブロックで4つのテストを実行します。
testOnly *CardiBSpec -- -z iLike
引用符を使用することもできるので、これも機能します。
testOnly *CardiBSpec -- -z "iLike"
これにより、単一のテストが実行されます。
testOnly *CardiBSpec -- -z "works with multiple arguments"
これにより、「workswith」で始まる2つのテストが実行されます。
testOnly *CardiBSpec -- -z "works with"
-t
ファイル内のテストを実行するオプションを取得できませんCardiBSpec
。このコマンドはテストを実行しません:
testOnly *CardiBSpec -- -t "works with multiple arguments"
-t
テストがdescribe
ブロックにネストされていない場合、このオプションは機能するようです。別のテストファイルを見てみましょう。
class CalculatorSpec extends FunSpec {
it("adds two numbers") {
assert(Calculator.addNumbers(3, 4) === 7)
}
}
-t
単一のテストを実行するために使用できます。
testOnly *CalculatorSpec -- -t "adds two numbers"
-z
単一のテストを実行するためにも使用できます。
testOnly *CalculatorSpec -- -z "adds two numbers"
これらの例を実行する場合は、このリポジトリを参照してください。テストの実行に関する詳細については、こちらをご覧ください。