web-dev-qa-db-ja.com

Gradleを使用して特定の計測ユニットテストを実行する

Gradleを使用して特定のAndroid Instrumentationユニットテストを実行する方法はありますか?

gradle -Dtest.single=UnitTestName connectedInstrumentTest

しかし、パッケージ内のすべてのテストを実行するようです。

39
Ivan Gromov

test.singleの使用は非推奨のようです。これを行うための新しい正しい方法は

./gradlew :<module>:test --tests <pattern>

<pattern>は次のようなものです。

  • com.example.MyTestはcom.example.MyTestのすべてのテストメソッドを実行します
  • *MyTestは、名前がMyTestで終わるすべてのクラスのすべてのメソッドに一致します
  • *.MyTest.myMethodは、パッケージ内のクラスMyTestで特定のテストメソッドを実行します

マルチプロジェクトビルドがある場合は、testタスクの前にモジュールパスを指定してください。そうしないと、すべてのサブプロジェクトでテストパターンを検索するときに誤解を招くエラーメッセージが表示されます。

Gradleのサイトには、これを見つけることができる場所で文書化されていません。

22
Chris Jones

パターンは-D<testTaskName>.single=<TestClass>なので、例では次のようになります。

gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest

注:この答えは時代遅れです。 Gradleの最新バージョンでは、--testsスイッチを使用する必要があります。 (説明については他の回答を参照してください)

20
erdi

これは、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'
16
jlhonora

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 を参照してください

7
hidro

これを確認する必要があります。

https://github.com/JCAndKSolutions/Android-unit-test

このgithubリポジトリで問題を作成し、この男が私の問題を解決してmavenにアップロードしたので、build.gradleファイルでこのプラグインを使用します。

指示は彼のリポジトリに書かれています。簡単にフォローできます。

このAndroidユニットテストプラグインを使用した後、次のように使用できます

../gradlew -Dtest.single=SomeTest test 

または

../gradlew -Dtest.single=SomeTest clean check

今では動作しており、私がしたい特定のテストしか実行できませんでした

1
Wooseong Kim

testプロパティ宣言の後にビルドバリアント名を指定することを忘れないでください

-Dtest<buildVariantName>=<yourTestName>

コンパイル後にdebugバリアントを提供するdebugビルドタイプがある場合、このビルドバリアントに対してのみテストを実行する場合は、次のようなコマンドを宣言する必要があります。

./gradlew -DtestDebug=UnitTestName testDebug

0
Alex Bonel

gradleコマンドは機能しません。以下のmentioened adbコマンドを使用しました。このためには、最初にapkをビルドする必要があります。

adb Shell am instrument -w -r -e package -e debug false .debug.test/Android.support.test.runner.AndroidJUnitRunner

0
Tarkik

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();
        }
    }
    //...
}
0
Denis Kniazhev