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

时间:2019-06-18 13:08:11

标签: android gradle kotlin junit kapt

我正在尝试在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 的另一个答案中的建议更改它时,错误是 未解决的参考:测试

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

2 个答案:

答案 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 /..

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