2016-12-13 8 views
6

現在、私はtest/src/javaフォルダを持っており、アンドロイドアプリケーションのすべてのテストが保存されています(テストはjunit、mockito、robolectricを使用して行われます)。androidの分割テストと統合テスト

そして私は、私は2つのフォルダ持っている達成したいのですがどのような./gradlew test

使用して、それらを実行することができます。

  1. integrationTest/src/java - 統合テストのための
  2. test/src/java - ユニットテストのために

また、私は別々に実行したいと思います。./gradlew test./gradlew integrationTest

私はこのようなsourceSetsを使用してテストして、ディレクトリを分割するために管理してきました:

sourceSets { 
     test { 
      java { 
       srcDirs = ['src/test/java', 'src/integrationTest/java', 'src/commonTest/java'] 
      } 
      resources { 
       srcDirs = ['src/test/resources', 'src/integrationTest/resources', 'src/commonTest/resources'] 
      } 
     } 
    } 

そして、私はカスタムテストタスクを作成する方法についての多くの例をGoogleで検索していたが、それらのほとんどは、Javaの代わりに、アンドロイドに関連しています他は古くなっています。私は一日中ここを過ごしました。誰かが私を助けることができれば、本当に感謝しています。

+0

このライブラリはここにあります:[link](https://github.com/Yelp/yelp-android/blob/master/build.gradle)は動作しています。ただし、 '' com.android.library''プラグインを使用します。 – rmoore

+0

デバイス/エミュレータで実行されるアンドロイドテストのデフォルトの 'androidTest'フォルダがあります。そのフォルダはあなたが必要とするものですか? –

答えて

0

おそらく

sourceSets { 
    integrationTest { 
     java { 
      compileClasspath += main.output 
      runtimeClasspath += main.output 
      srcDir 'src/integrationTest/java' 
     } 
     resources.srcDir 'src/integrationTest/resources' 
    } 
} 

configurations { 
    integrationTestCompile { 
     extendsFrom compile 
    } 
    integrationTestRuntime { 
     extendsFrom runtime 
    } 
} 

task integrationTest(type: Test) { 
    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 
} 
check.dependsOn integrationTest 

のようなもの、あなたはあなたの統合テストはテストをインストルメントしている場合は、あなただけのデフォルトのフォルダtestandroidTestを使用することができますし、./gradlew testを使用して、それらを別々に実行する

dependencies { 
    integrationTestCompile 'org.seleniumhq.selenium:selenium-java:3.0.1' 
    integrationTestRuntime 'com.foo:bar:1.0' 
} 
+0

これはJavaソリューションですか、いいえ? Androidは少し異なります。 – rmoore

2

を行うことができますおよび./gradlew connectedAndroidTest

別の方法(integat testフォルダ内のイオンのテストは)testフォルダ内の別々のパッケージを使用し、使用して個別にテストを実行するために、次のようになります。

./gradlew testDebug --tests="com.yourapplication.unittests.*" 
./gradlew testDebug --tests="com.yourapplication.integrationtests.*" 
... 
+0

'./gradlew testDebug --tests com.company.package.unittest *' を参照してくださいhttps://developer.android.com/studio/test/command-line.html#RunTestsGradle と ます。https:// docs.gradle.org/current/userguide/java_plugin.html#test_filtering アンドロイドアプリで実際に機能するソリューションです。他にも多くのサンプルやソリューションがありますが、それらはJavaプロジェクトであり、アンドロイドではありません。 – Mike

1

私は数日前に同じ問題を抱えていました。

は、それを解決し、独立して、テストの各タイプを実行できるようにするために、私はこのように私のテストを分離:

// run only unit tests 
test{ 
    include '**/unit/**' 
    exclude '**/integration/**' 
    doLast { 
     println 'Unit tests execution finished.' 
    } 
} 

// run only integration tests 
task integrationTest(type: Test){ 
    include '**/integration/**' 
    exclude '**/unit/**' 
    doLast { 
     println 'Integration tests execution finished.' 
    } 
} 

// run all tests (unit + integration) 
task allTests(type: Test){ 
    include '**/integration/**' 
    include '**/unit/**' 
    doLast { 
     println 'All tests execution finished.' 
    } 
} 

キーワードを使用すると、コマンドを実行するときに含めるどのファイルを示し含めます。 単体テストを実行する場合は、単体テストを含むフォルダのみを含めることができ、統合テストを含むフォルダは除外することができます。

統合テストだけを実行するために、gradleコマンドを作成するときに同様のロジックを使用できます。ユニットテストのみを実行するために

  • ./gradlew test:この設定とGradleでは、使用を使用してテストを実行するには

  • ./gradlew integrationTestsインテグレーションテストを実行する
  • ./gradlew allTests実行する統合と単体テスト。

注:あなたは、あなたのテストを実行するときにテストやクラスを包含/除外するために、セットアップ含み/除外のパスをすることができます。 1つのテストだけを含めることも、他のテストを除外することも可能で、その逆も可能です。