web-dev-qa-db-ja.com

Gradleでテストクラスを1つだけ実行する方法

私はGradleに不慣れです。私はGradle 1.10とUbuntu 13を使っています。

SBTの 'testonly'のように、テストクラスを1つだけ実行するコマンドがあるかどうかを知りたいです。

313
bula

単一のテストクラスを実行するためにエアボルンの答えは良いです。

here というコマンドラインオプションをいくつか使用すると、単純にこのようなことができます。

gradle test --tests org.gradle.SomeTest.someSpecificFeature
gradle test --tests *SomeTest.someSpecificFeature
gradle test --tests *SomeSpecificTest
gradle test --tests all.in.specific.package*
gradle test --tests *IntegTest
gradle test --tests *IntegTest*ui*
gradle test --tests *IntegTest.singleMethod
gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui

Gradleのバージョン1.10から、 テストフィルタ を使ってテストの選択をサポートしています。例えば、

apply plugin: 'Java'

test {
  filter {
    //specific test method
      includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"

     //specific test method, use wildcard for packages
     includeTestsMatching "*SomeTest.someSpecificFeature"

     //specific test class
     includeTestsMatching "org.gradle.SomeTest"

     //specific test class, wildcard for packages
     includeTestsMatching "*.SomeTest"

     //all classes in package, recursively
     includeTestsMatching "com.gradle.tooling.*"

     //all integration tests, by naming convention
      includeTestsMatching "*IntegTest"

     //only ui tests from integration tests, by some naming convention
     includeTestsMatching "*IntegTest*ui"
   }
}

マルチフレーバー環境(Androidの一般的なユースケース)では、 この回答を確認してください--tests引数はサポートされていないためエラーになるでしょう。

389

単一のクラスをテストする場合、またはgradle -Dtest.single=ClassUnderTestTest testのような正規表現を使用する場合は、gradle -Dtest.single=ClassName*Test testを実行できます。テスト用のフィルタリングクラスのより多くの例を見つけることができます このリンク セクション23.12テスト

175
airborn

あなたがマルチモジュールプロジェクトを持っているならば:

あなたのモジュール構造が

root-module
 -> a-module
 -> b-module

そして、実行しようとしているテスト(testToRun)はbモジュールにあり、絶対パスはcom.xyz.b.module.TestClass.testToRunです。

ここであなたはb-moduleでテストを実行することに興味があるので、b-moduleで利用可能なタスクを見るべきです。

./gradlew :b-module:tasks

上記のコマンドは、説明とともにb-module内のすべてのタスクをリストします。そして理想的な場合には、そのモジュールで単体テストを実行するために test という名前のタスクがあります。

./gradlew :b-module:test

これで、bモジュールですべてのテストを実行する段階に到達しました。最後に、特定のパスパターンに一致するテストを実行するために上記のタスクにパラメータを渡すことができます。

./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"

今、あなたが実行している場合はこれの代わりに

./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"

モジュールaとbの両方に対してテストタスクを実行しますが、a-moduleには上記のパターンに一致するものがないため、失敗する可能性があります。

80
greperror

多くのことを考え出した後、次のことが私にとって役に立ちました。

gradle test --tests "a.b.c.MyTestFile.mySingleTest"

25
Pratik Khadloya

フレーバーが異なると--testsオプションが機能しないことがあります( "Unknown command-line option '--tests'"で失敗します)。この場合は、特定のテストタスクを指定する必要があります(例: 'test'ではなく 'testProdReleaseUnitTest')。

13
anagaf

最後にアスタリスク(*)を追加する必要があります。

gradle test --tests "com.a.b.c. *"

1
mutkan

以下はgradlewコマンドラインオプションを使用して単一のテストクラスを実行するコマンドです。

gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass

変種com.example.TestClassを使ってクラスVariant_1を実行する以下の例:

gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass 

MyTestという単一のテストを実行します。

./gradlew app:testDebug --tests=com.example.MyTest
0
kreker

私の場合、私のEclipse Javaコンパイラーの警告は高すぎて、Eclipseは私のクラスが実行に有効であると認識していませんでした。私のコンパイラ設定を更新することで問題は解決しました。あなたはここでそれについてもっと読むことができます: annotation-nonnull - 解決できない

0
Greg