Android 测试类中缺少对测试库的引用

Android 测试类中缺少对测试库的引用,android,gradle,kotlin,junit,kapt,Android,Gradle,Kotlin,Junit,Kapt,我正在尝试在android模块上运行单元测试。该模块有多种产品风格,包括一维和两种构建类型(调试+发布)。我还为main、test和每种口味定义了源集 我要做的是在这样的模块中运行任何测试 唯一有效的解决方案是将测试库的依赖关系从testImplementation更改为简单实现 应用程序的代码在src/nl/my包等中 测试代码在src/test/java/nl/my包等中 依赖项: testImplementation "junit:junit:4.12" testImplementatio

我正在尝试在android模块上运行单元测试。该模块有多种产品风格,包括一维和两种构建类型(调试+发布)。我还为main、test和每种口味定义了源集

我要做的是在这样的模块中运行任何测试

唯一有效的解决方案是将测试库的依赖关系从testImplementation更改为简单实现

应用程序的代码在src/nl/my包等中

测试代码在src/test/java/nl/my包等中

依赖项:

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作为注释处理器来运行它时,错误只是 错误:不兼容的类型:不存在的类无法转换为批注

但当我按照简单注释处理器的另一个答案中的建议更改它时,错误就出现了 未解析引用:测试

有人知道怎么处理吗?
在这个项目的另一个模块中(这些模块是没有活动的简单数据和域模块等),这样的代码工作正常。

您定义了
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']
    }
其中文件夹的结构为: 模块名称/src/。。 模块名称/测试/


现在一切正常。感谢您的帮助

我太快了,而是检查了另一个模块中的测试:(不幸的是,在将kapt更改为annotation processor后,此解决方案与上一个解决方案的工作方式不同。main的当前配置如您所建议的:java{srcDirs=['src']排除'src/test/**}还是一样。重建了项目,什么也没有改变。你为什么配置源集而不是使用项目默认值?文件的路径有问题吗?它在KAPT构建路径中吗?@PFuster这是这个项目中的状态-不是我现在要更改它-太多的文件无法更改update@tynn有问题的文件直接在sr下c/测试/包名称
    main { 
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
    }

    test {
        java.srcDirs = ['tests/java']
        resources.srcDirs = ['tests/java']
    }