Gradleを使用して特定のAndroid Instrumentationユニットテストを実行する方法はありますか?
gradle -Dtest.single=UnitTestName connectedInstrumentTest
しかし、パッケージ内のすべてのテストを実行するようです。
test.single
の使用は非推奨のようです。これを行うための新しい正しい方法は
./gradlew :<module>:test --tests <pattern>
<pattern>
は次のようなものです。
com.example.MyTest
はcom.example.MyTestのすべてのテストメソッドを実行します*MyTest
は、名前がMyTestで終わるすべてのクラスのすべてのメソッドに一致します*.MyTest.myMethod
は、パッケージ内のクラスMyTestで特定のテストメソッドを実行しますマルチプロジェクトビルドがある場合は、test
タスクの前にモジュールパスを指定してください。そうしないと、すべてのサブプロジェクトでテストパターンを検索するときに誤解を招くエラーメッセージが表示されます。
Gradleのサイトには、これを見つけることができる場所で文書化されていません。
パターンは-D<testTaskName>.single=<TestClass>
なので、例では次のようになります。
gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest
注:この答えは時代遅れです。 Gradleの最新バージョンでは、
--tests
スイッチを使用する必要があります。 (説明については他の回答を参照してください)
これは、instrumentationTestRunner
を使用している場合に機能します。
./gradlew test -Pandroid.testInstrumentationRunnerArguments.class='<pkg>.YourClassName'
Gradle 2.10およびAndroid gradle plugin 2.0.0-beta2。
実行したいテストを知っているので、おそらくどのモジュール/フレーバーを使用するかも知っています。正確なモジュールとGradleタスクを指定することで、Gradleを支援できます。したがって、テストがapp
モジュールにあり、debug
フレーバーをテストする場合:
./gradlew app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class='<pkg>.YourClassName'
Android gradle plugin 1.1.0-rc1なので、以下を実行することにより、--tests
フラグを使用して単一のテストクラスを実行できます。
./gradlew app:testDebug --tests=com.example.MyTest
http://tools.Android.com/tech-docs/unit-testing-support#TOC-Running-from-Gradle を参照してください
これを確認する必要があります。
https://github.com/JCAndKSolutions/Android-unit-test
このgithubリポジトリで問題を作成し、この男が私の問題を解決してmavenにアップロードしたので、build.gradleファイルでこのプラグインを使用します。
指示は彼のリポジトリに書かれています。簡単にフォローできます。
このAndroidユニットテストプラグインを使用した後、次のように使用できます
../gradlew -Dtest.single=SomeTest test
または
../gradlew -Dtest.single=SomeTest clean check
今では動作しており、私がしたい特定のテストしか実行できませんでした
test
プロパティ宣言の後にビルドバリアント名を指定することを忘れないでください
-Dtest<buildVariantName>=<yourTestName>
。
コンパイル後にdebug
バリアントを提供するdebug
ビルドタイプがある場合、このビルドバリアントに対してのみテストを実行する場合は、次のようなコマンドを宣言する必要があります。
./gradlew -DtestDebug=UnitTestName testDebug
gradleコマンドは機能しません。以下のmentioened adbコマンドを使用しました。このためには、最初にapkをビルドする必要があります。
adb Shell am instrument -w -r -e package -e debug false .debug.test/Android.support.test.runner.AndroidJUnitRunner
Erdiの答えは私にはうまくいきませんでしたが、すべてのテストクラスに単一の親がいるので、これを行うことができました:
public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
//...
@Override
protected void runTest() throws Throwable {
if(getClass().getSimpleName().equals("MyTestClassName")) {
super.runTest();
}
}
//...
}
これはMyTestClassName
のみを実行します。特定のテストメソッドのみを実行するようにさらに拡張できます。
public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
//...
@Override
protected void runTest() throws Throwable {
if("MyTestClassName".equals(getClass().getSimpleName())
&& "testMethodName".equals(getName())) {
super.runTest();
}
}
//...
}