在为应用程序模块编写测试时,我常常发现自己为Android测试/androidTest
和单元测试/test
复制完全相同的测试类集,例如模拟或助手。
例如,我有一些静态函数可以帮助我在/test/MockUtils.java
中快速设置模拟但是,我不能在任何Android测试中重用这个帮助程序类,因为它们不共享相同的类路径 - {{ 1}} vs /androidTest
。
我想过创建一个只包含测试资源的新模块。但是,这个想法不会飞,因为Android Gradle插件拒绝依赖于app模块。
项目testCommon解析为APK归档,不支持作为编译依赖项。
有没有其他方法可以创建可以在Android测试和单元测试中重用的测试类?
答案 0 :(得分:6)
注意:这是一个理论化的解决方案,我没有尝试过。
步骤1:在您尝试设置共享测试代码的模块中创建一个testSrc/
目录。
步骤2:将共享代码放在该目录中(使用基于Java包的相应子目录)。
步骤3:在模块的android
文件中的build.gradle
闭包内添加以下闭包:
sourceSets {
androidTest {
java.srcDirs <<= 'testSrc'
}
test {
java.srcDirs <<= 'testSrc'
}
}
这应该告诉Gradle for Android testSrc
是androidTest
和test
源集中的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)
以下博客中描述的解决方案帮助了我。
我将共享的测试代码放入src / sharedTest / java。然后我将以下代码添加到build.gradle:
<pre>
android {
sourceSets {
String sharedTestDir = 'src/sharedTest/java'
test {
java.srcDir sharedTestDir
}
androidTest {
java.srcDir sharedTestDir
}
}
}
</pre>