私はGradleに不慣れです。私はGradle 1.10とUbuntu 13を使っています。
SBTの 'testonly'のように、テストクラスを1つだけ実行するコマンドがあるかどうかを知りたいです。
単一のテストクラスを実行するためにエアボルンの答えは良いです。
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
引数はサポートされていないためエラーになるでしょう。
単一のクラスをテストする場合、またはgradle -Dtest.single=ClassUnderTestTest test
のような正規表現を使用する場合は、gradle -Dtest.single=ClassName*Test test
を実行できます。テスト用のフィルタリングクラスのより多くの例を見つけることができます このリンク セクション23.12テスト
あなたがマルチモジュールプロジェクトを持っているならば:
あなたのモジュール構造が
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には上記のパターンに一致するものがないため、失敗する可能性があります。
多くのことを考え出した後、次のことが私にとって役に立ちました。
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
フレーバーが異なると--testsオプションが機能しないことがあります( "Unknown command-line option '--tests'"で失敗します)。この場合は、特定のテストタスクを指定する必要があります(例: 'test'ではなく 'testProdReleaseUnitTest')。
最後にアスタリスク(*)を追加する必要があります。
gradle test --tests "com.a.b.c. *"
以下は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
私の場合、私のEclipse Javaコンパイラーの警告は高すぎて、Eclipseは私のクラスが実行に有効であると認識していませんでした。私のコンパイラ設定を更新することで問題は解決しました。あなたはここでそれについてもっと読むことができます: annotation-nonnull - 解決できない