如何创建可在Android测试和单元测试中使用的测试类?

时间:2015-07-26 09:47:43

标签: android unit-testing testing

在为应用程序模块编写测试时,我常常发现自己为Android测试/androidTest和单元测试/test复制完全相同的测试类集,例如模拟或助手。

例如,我有一些静态函数可以帮助我在/test/MockUtils.java中快速设置模拟但是,我不能在任何Android测试中重用这个帮助程序类,因为它们不共享相同的类路径 - {{ 1}} vs /androidTest

我想过创建一个只包含测试资源的新模块。但是,这个想法不会飞,因为Android Gradle插件拒绝依赖于app模块。

  

项目testCommon解析为APK归档,不支持作为编译依赖项。

有没有其他方法可以创建可以在Android测试和单元测试中重用的测试类?

3 个答案:

答案 0 :(得分:6)

注意:这是一个理论化的解决方案,我没有尝试过。

步骤1:在您尝试设置共享测试代码的模块中创建一个testSrc/目录。

步骤2:将共享代码放在该目录中(使用基于Java包的相应子目录)。

步骤3:在模块的android文件中的build.gradle闭包内添加以下闭包:

sourceSets {
    androidTest {
        java.srcDirs <<= 'testSrc'
    }

    test {
        java.srcDirs <<= 'testSrc'
    }
}

这应该告诉Gradle for Android testSrcandroidTesttest源集中的Java代码的另一个源目录。

答案 1 :(得分:4)

基于CommonsWare的解决方案和https://code.google.com/p/android/issues/detail?id=181391,添加其他类路径的正确方法是使用+=<<=运算符。

sourceSets {
    androidTest {
        java.srcDirs <<= 'testSrc'
    }

    test {
        java.srcDirs += 'testSrc'
    }
}

答案 2 :(得分:1)

以下博客中描述的解决方案帮助了我。

http://blog.danlew.net/2015/11/02/sharing-code-between-unit-tests-and-instrumentation-tests-on-android/

我将共享的测试代码放入src / sharedTest / java。然后我将以下代码添加到build.gradle:

<pre>
android {  
  sourceSets {
    String sharedTestDir = 'src/sharedTest/java'
    test {
      java.srcDir sharedTestDir
    }
    androidTest {
      java.srcDir sharedTestDir
    }
  }
}
</pre>