回答:
単一のテストクラスを実行するには、Airbornの答えが適切です。
ここにあるいくつかのコマンドラインオプションを使用すると、このようなことを簡単に実行できます。
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
引数はサポートされていないでしょうし、あなたがエラーを取得します。
--tests
してクラス内の単一のテストメソッドを呼び出す場合でも、実行されていないクラスも含めて、すべてのクラスの反復が見られます。これは遅すぎます。その遅さの原因が私たちの環境にあるのか、それとも他の人に影響するのかわかりません。もっと見つけたら更新できます。
あなたは行うことができますgradle -Dtest.single=ClassUnderTestTest test
あなたのような単一のクラスまたは使用の正規表現をテストしたい場合はgradle -Dtest.single=ClassName*Test test
、あなたがテストのためのフィルタリングクラスの他の例を見つけることができます。このリンクの下のセクション23.12を。テスト。
--tests
は、置換するように設定されているコマンドラインオプションをサポートしてい-DtestTaskName.single
ます。
--test
オプションまた、あなたのテストクラス内の単一のメソッドをテスト制限することができます。たとえば 、クラス内でgradle test --tests *MyTest.someMethod
1つのテストのみを実行someMethod
しますMyTest
。テストケースを作成するときは、通常、一度に1つのメソッドを実行して、デバッグする必要のある出力のみに集中しやすくし、最後にテストケース全体を実行します。
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
です。gradle.orgのこのディスカッションを
--no-rebuild
オプションを使用することもできます。たとえばgradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
、依存関係が再構築されないようにして、その単一のテストをより速く実行したい場合があります。
マルチモジュールプロジェクトがある場合:
あなたのモジュール構造が
root-module
-> a-module
-> b-module
実行しようとしているtest(testToRun)は、フルパスのb-moduleにあります:com.xyz.b.module.TestClass.testToRun
ここでは、bモジュールでテストを実行することに関心があるので、bモジュールで使用可能なタスクが表示されます。
./gradlew :b-module:tasks
上記のコマンドは、bモジュールのすべてのタスクを説明付きで一覧表示します。そして理想的なケースでは、そのモジュールで単体テストを実行するための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モジュールには上記のパターンに一致するものが何もないため、失敗する可能性があります。
./gradlew :b-module:test --tests testToRun
多くのことを考え出した後、次のことがうまくいきました:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
--tests
ビルドが異なる場合、オプションが機能しない場合があることに注意してくださいtypes/flavors
(で失敗しますUnknown command-line option '--tests'
)。この場合、特定のテストタスクを指定する必要があります(例:testProdReleaseUnitTest
だけでなくtest
)
./gradlew test --tests *testMyCollectionTake*
に置き換える方法がわかりませんtest
以下は、コマンド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
私の場合、Eclipse Javaコンパイラの警告の設定が高すぎるため、Eclipseがクラスを実行に有効であると認識していませんでした。コンパイラ設定を更新すると問題が解決しました。詳細については、こちらをご覧ください:annotation-nonnull-cannot-be-resolved