【问题标题】:Grouping robolectric tests using junit Category in an Android gradle project在 Android gradle 项目中使用 junit 类别对 robolectric 测试进行分组
【发布时间】:2016-04-30 06:01:29
【问题描述】:

我想使用 Junit Category 注解对 robolectric 单元测试进行分组,这样某些测试就不会在特定情况下运行。

在一个普通的java项目中,我知道我可以使用

apply plugin: 'java'
test {
    useJUnit {
        includeCategories 'FastTest'
    }
}

指定类别。

但显然“java”插件与 Android 插件“com.android.application”不兼容。

Error:The 'java' plugin has been applied, but it is not compatible with the Android plugins.

我尝试创建自定义 gradle 任务

sourceSets {
    test {
        java.srcDir file('src/test/java')
        resources.srcDir file('src/test/resources')
    }
}

task testWithFastCategory(type: Test) {
    group = "test"
    testClassesDir = sourceSets.test.output.classesDir
    classpath = sourceSets.test.runtimeClasspath
    useJUnit {
        includeCategories 'FastTest'
    }
}

但 gradle 似乎无法为测试找到正确的类路径。

有人可以提供一个示例 gradle 设置来运行 Android 项目下按类别分组的 robolectric 测试吗?

【问题讨论】:

标签: android gradle junit robolectric


【解决方案1】:

忘记发布我的解决方案:

android {
  testOptions {
    unitTests.all {
        useJUnit {
            // Include or exclude unit tests with specific categories
            // ex. use -DincludeCategories=com.ooxx.test.FastRun
            // to run tests with 'FastRun' category on CI server.
            String defaultPackage = "com.ooxx.test."
            if (System.properties['includeCategories'] != null) {
                def categories = System.properties['includeCategories'].split(',')
                categories = categories.collect {
                    it.charAt(0).isUpperCase() ? defaultPackage + it : it
                }
                println name + ": include category"
                categories.each { category ->
                    println " - " + category
                }
                includeCategories categories as String[]
            }
            // ex. use -DexcludeCategories=com.ooxx.test.DoNotRun
            if (System.properties['excludeCategories'] != null) {
                def categories = System.properties['excludeCategories'].split(',')
                categories = categories.collect {
                    it.charAt(0).isUpperCase() ? defaultPackage + it : it
                }
                println name + ": exclude category"
                categories.each { category ->
                    println " - " + category
                }
                excludeCategories categories as String[]
            }
        }
      }
   }
}

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多