android - 如何为 Android/Gradle 设置单元测试

标签 android unit-testing android-gradle-plugin

阅读 android guide on testing 后使用 android gradle 插件,我想为我的 POJO 设置 JUnit 测试,这些测试不与仪器测试一起运行。这个想法是,对不依赖于 Android 的代码的测试应该非常快(并促进 TDD)。

是否有一种标准方法可以在 build.gradle 中设置源集和任务来完成此任务?这是主要问题,次要问题是我下面的尝试有什么问题......

我正在使用 Android Studio 0.4.2 和 Gradle 1.9,在新的“测试”文件夹中试验一个简单的 JUnit 测试类。到目前为止,这是我所拥有的,但是当我运行“gradle testPojo”时,我得到了这个结果:

:android:assemble UP-TO-DATE
:android:compileUnitTestJava UP-TO-DATE
:android:processUnitTestResources UP-TO-DATE
:android:unitTestClasses UP-TO-DATE
:android:testPojo FAILED

* What went wrong:
Execution failed for task ':android:testPojo'.
> failed to read class file 
/path/to/project/android-app/build/classes/unitTest/TestClass.class

我验证了该类确实存在,所以我对任务无法读取文件的原因感到困惑。

这是 build.gradle 文件:

...

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

dependencies {
  ...
  unitTestCompile 'junit:junit:4.11'
}

configurations {
  unitTestCompile.extendsFrom instrumentTestCompile
  unitTestRuntime.extendsFrom instrumentTestRuntime
}

task testPojo(type: Test, dependsOn: assemble){
  description = "Run pojo unit tests (located in src/test/java...)."
  testClassesDir = sourceSets.unitTest.output.classesDir

  android.sourceSets.main.java.srcDirs.each { dir ->
    def buildDir = dir.getAbsolutePath().split('/')
    buildDir =  (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/')
    sourceSets.unitTest.compileClasspath += files(buildDir)
    sourceSets.unitTest.runtimeClasspath += files(buildDir)
  }
  classpath = sourceSets.unitTest.runtimeClasspath
}

check.dependsOn testPojo

最佳答案

我建议你使用robolectric,声明如下:

classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+'

然后应用插件:

apply plugin: 'robolectric'

关于android - 如何为 Android/Gradle 设置单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592528/

相关文章:

android - 从local.properties加载属性在Gradle Android Studio中不起作用

c# - 在 C# 中执行/调试单元测试 "method"?

android - 错误:需要gradle 2.2版。当前版本是6.5.1

android - gradle build flavor 和 packagingOptions 的问题

java - 错误 : Could not find method jcenter() for arguments [] on repository container

Android OPEN GL ES 多纹理什么都不画

maven - Android在maven中编译失败

android - 在 RelativeLayout 中按中心线对齐 View

java - 注释服务以使用@Retention、@Transactional、@Inherited 进行测试后,TestNG 单元测试不起作用

unit-testing - 为单个接口(interface)编写测试并为多个实现运行它们