测试中缺少对测试库的引用 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/..

现在一切正常。感谢帮助