测试中缺少对测试库的引用 class
Missing refrences to test libraries in test class
我正在尝试 运行 对 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 的另一个答案中的建议更改它时,错误是
未解决的参考:测试
有人知道如何处理吗?
在这个项目的另一个模块(它们是没有活动的简单数据和域模块等)中,这样的代码工作正常。
您定义了 java.srcDirs = ['src']
,因此 'src/test/java'
被视为 Java 源代码树的一部分。
您应该考虑遵循项目默认设置,不要自己配置太多。否则,您需要手动从源集中排除测试:
sourceSets {
main {
java {
srcDir 'src'
exclude 'test/**'
}
}
}
终于找到解决办法了。
main {
java.srcDirs = ['src']
resources.srcDirs = ['src']
}
test {
java.srcDirs = ['tests/java']
resources.srcDirs = ['tests/java']
}
其中文件夹结构为:
module_name/src/..
module_name/tests/..
现在一切正常。感谢帮助
我正在尝试 运行 对 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 的另一个答案中的建议更改它时,错误是 未解决的参考:测试
有人知道如何处理吗? 在这个项目的另一个模块(它们是没有活动的简单数据和域模块等)中,这样的代码工作正常。
您定义了 java.srcDirs = ['src']
,因此 'src/test/java'
被视为 Java 源代码树的一部分。
您应该考虑遵循项目默认设置,不要自己配置太多。否则,您需要手动从源集中排除测试:
sourceSets {
main {
java {
srcDir 'src'
exclude 'test/**'
}
}
}
终于找到解决办法了。
main {
java.srcDirs = ['src']
resources.srcDirs = ['src']
}
test {
java.srcDirs = ['tests/java']
resources.srcDirs = ['tests/java']
}
其中文件夹结构为: module_name/src/.. module_name/tests/..
现在一切正常。感谢帮助