2016-02-17 8 views
6

私はAndroidプロジェクトに2つ(または複数)のテストタスクを持たせたいと思っています。その違いは、含まれる/除外するJunitカテゴリの違いです。カテゴリのAndroidのユニットテスト

GradleのJavaプラグインを使用して、私は

task testFast(type: Test) { 
    useJUnit { 
     includeCategories 'foo.Fast' 
     excludeCategories 'foo.Slow' 
    } 
} 

task testSlow(type: Test) { 
    useJUnit { 
     includeCategories 'foo.Slow' 
     excludeCategories 'foo.Fast' 
    } 
} 

ような何かを行うことができますしかし、Androidのプラグインを使用している場合、私は包含/除外するためにアンドロイドの閉鎖にtestOptionsを追加する必要があり、

android { 
... 
    testOptions { 
     unitTests.all { 
      useJUnit { 
       excludeCategories foo.Slow' 
      } 
     } 
    } 
... 
} 

でももちろん、すべてのビルドバリアントのすべてのテストタスクに適用されます。

同じビルドバリアントを使用するタスクを作成する方法はありますか?異なるカテゴリでテストを実行しますか?

答えて

5

私が作ってみたベストは、コマンドラインからGradleのプロパティを使用することです:

testOptions { 
    unitTests.all { 
     useJUnit { 
      if (project.hasProperty('testCategory') && testCategory == "Slow") { 
       includeCategories 'foo.Slow' 
      } else { 
       excludeCategories 'foo.Slow' 
      } 
     } 
    } 
} 

gradlew -PtestCategory=Slow test 
0

を使用し、私は余分のGradleを必要としないソリューションを必要とし私はこれを思いついた。あなたは一度だけテストタスクの多くを実行することを確実にする必要があります。

私は、アンドロイドプラグインが将来のリリースでこれをより簡単にすることを望んでいます。

task testFast(dependsOn: 'testDebugUnitTest') 
task testSlow(dependsOn: 'testDebugUnitTest') 

gradle.taskGraph.whenReady { taskGraph -> 
    def testTask = tasks.getByName("testDebugUnitTest") 

    if (taskGraph.hasTask(tasks.getByName("testFast"))) { 
     testTask.useJUnit { 
      includeCategories 'foo.Fast' 
      excludeCategories 'foo.Slow' 
     } 
    } 

    if (taskGraph.hasTask(tasks.getByName("testSlow"))) 
     testTask.useJUnit { 
      includeCategories 'foo.Slow' 
      excludeCategories 'foo.Fast' 
     } 
    } 
} 
関連する問題