我正在尝试在android模块上运行单元测试。此模块具有一维和两种构建类型(调试+发布)的多种产品风格。我还定义了主要,测试和每种口味的资源集。
我正在努力的是在这样的模块中运行任何测试。
唯一可行的解决方案是将测试库的依赖关系从testImplementation更改为简单实现。
应用程序代码位于 src / nl / my-package 等
中测试代码位于 src / test / java / nl / my-package 等
中 sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
test {
java.srcDirs = ['src/test/java']
resources.srcDirs = ['src/test/java']
}
dev {
res.srcDirs = ['default/res']
}
stage {
res.srcDirs = ['default/res']
}
依赖性:
testImplementation "junit:junit:4.12"
testImplementation "org.assertj:assertj-core:1.7.1"
testImplementation "org.robolectric:robolectric:3.4.2"
testImplementation 'org.mockito:mockito-inline:2.13.0'
简单测试的代码是:
package nl.my_package
import org.junit.Test
class CopyDisciplineSketchTest {
@Test
fun test() {
assert(true)
}
}
当我在项目依赖项 kapt 中使用它作为注释处理器运行它时,错误仅仅是 错误:不兼容的类型:NonExistentClass无法转换为Annotation
但是当我按照简单的 annotationProcessor 的另一个答案中的建议更改它时,错误是 未解决的参考:测试
有人知道如何处理吗? 在该项目的另一个模块(即没有活动等的简单数据和域模块)中,这些代码可以正常工作。
答案 0 :(得分:1)
您定义了java.srcDirs = ['src']
,因此'src/test/java'
被认为是 Java 源代码树的一部分。
您应该考虑遵循项目的默认值,并且自己不要配置太多。否则,您需要手动从源集中排除测试:
sourceSets {
main {
java {
srcDir 'src'
exclude 'test/**'
}
}
}
答案 1 :(得分:0)
最后我找到了解决方案。
main {
java.srcDirs = ['src']
resources.srcDirs = ['src']
}
test {
java.srcDirs = ['tests/java']
resources.srcDirs = ['tests/java']
}
文件夹的结构为: module_name / src / .. module_name / tests /..
现在一切正常。感谢您的帮助