184

sbtで実行することにより、単一のテストを実行できることを私は知っています。

testOnly *class -- -n Tag

タグなしで単一のテストを実行するようにsbt/scalatestに指示する方法はありますか?例えば:

testOnly *class -- -X 2

それは「クラスで2番目のテストを実行する。それが何であれ」を意味します。たくさんのテストがあり、誰もそれらにタグを付ける必要はありません。タグなしで単一のテストを実行する方法はありますか?

4

5 に答える 5

233

これは、インタラクティブモードで(ScalaTest 2.1.3以降)サポートされるようになりました。

testOnly *MySuite -- -z foo

名前に部分文字列「foo」が含まれるテストのみを実行します。

部分文字列ではなく完全に一致させるには、-tの代わりにを使用し-zます。

于 2014-03-18T20:59:03.587 に答える
127

他の回答に付随する具体的な例を追加したかった

テストするクラスの名前を指定する必要があるため、次のプロジェクトがある場合(これはPlayプロジェクトです):

プロジェクトを再生する

LoginSBTコンソールから次のコマンドを実行することにより、テストのみをテストできます。

test:testOnly *LoginServiceSpec

SBTコンソールの外部からコマンドを実行している場合は、次のようにします。

sbt "test:testOnly *LoginServiceSpec"
于 2017-03-29T20:54:13.933 に答える
53

テストクラス内でタグなしの単一のテストを実行する方法がわかりませんが、この質問に遭遇した人には役立つと思われるワークフローを提供しています。

sbtセッション内から:

test:testOnly *YourTestClass

(アスタリスクはワイルドカードです。フルパスを指定できますcom.example.specs.YourTestClass。)

そのテストクラス内のすべてのテストが実行されます。おそらく、テストの失敗に最も関心があるので、失敗した実装を修正してから、以下を実行します。

test:testQuick

...失敗したテストのみを実行します。(最後に実行されたコマンドを繰り返すことはこの場合test:testOnlyと同じですが、テストメソッドを適切なテストクラスに分割すると、ワイルドカードを使用して、失敗したテストをより効率的に再実行できます。)test:testQuicktest:testQuick

ScalaTestのテストの命名法はテストクラスであり、特定のテストメソッドではないため、タグなしのすべてのメソッドが実行されることに注意してください。

テストクラスにテストメソッドが多すぎる場合は、それらを別々のクラスに分割するか、適切にタグ付けします。(これは、テスト対象のクラスが単一責任の原則に違反しており、リファクタリングを使用している可能性があることを示している可能性があります。)

于 2013-08-26T14:27:51.480 に答える
21

タイラーの例を単純化するためだけに。

test:-プレフィックスは必要ありません。

だから彼の例によると:

-consoleのsbt場合:

testOnly *LoginServiceSpec

そしてターミナルで:

sbt "testOnly *LoginServiceSpec"
于 2019-03-07T15:18:49.327 に答える
14

これは、ランナーの使用に関する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"

これらの例を実行する場合は、このリポジトリを参照してください。テストの実行に関する詳細については、こちらをご覧ください。

于 2020-03-16T20:05:29.823 に答える