【问题标题】:Kotlin Unit Test Not Finding Module Dependency InterfaceKotlin 单元测试未找到模块依赖接口
【发布时间】:2018-03-05 00:24:01
【问题描述】:

我有一个app 模块和一个domain 模块。在我的domain 模块中,我有一个名为Repository 的接口。在我的app 模块中,我使用dagger 将一个实现注入到我的类中,这工作正常。

当我使用 kotlin 单元测试对其进行测试时,在运行时我得到一个 NoClassDefFoundError

我也尝试将domain 模块包含在我的app 模块依赖项中,就像这样,但这也不起作用:

testImplementation project(':domain')

这是我当前的测试依赖项以及我如何包含模块

implementation project(':domain')
testImplementation 'junit:junit:4.12'
testImplementation 'com.nhaarman:mockito-kotlin:1.5.0'

在我的单元测试中,我像这样使用它,这可能是问题所在:

@Mock lateinit var mockRepo : Repository

【问题讨论】:

  • 你应该使用api project(':domain')而不是implementation project(':domain')吗?
  • 我不这么认为,因为没有依赖于我的 app 模块的依赖项,它只在内部使用?除非我理解不正确?
  • com.nhaarman:mockito-kotlin:1.5.0 包含 mockito-core 作为依赖项?那应该是testApi com.nhaarman:mockito-kotlin:1.5.0 - 如果testApi 存在 - 当您通过com.nhaarman:mockito-kotlin:1.5.0 库使用@Mock 注释时。
  • 尝试将其更改为 testApi 但没有运气。也试过api project(':domain'),但也没有用。
  • 为了排除依赖关系,我会使用 testCompile(虽然 3.0+ 已弃用应该可以正常工作)而不是 testImplementation

标签: android gradle mockito kotlin


【解决方案1】:

感谢@Mark Keen,我能够在 Jetbrains 网站上找到reported bug

其中包含来自名为 @Calin 的用户的解决方案。将以下内容添加到项目的 build.gradle 文件并触发 gradle 同步就可以了。

subprojects { subProject ->
    afterEvaluate {
        if (subProject.plugins.hasPlugin("kotlin") && subProject.plugins.hasPlugin("java-library")) {
            subProject.kotlin.copyClassesToJavaOutput = true
            subProject.jar.duplicatesStrategy = DuplicatesStrategy.EXCLUDE
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2018-10-31
    • 1970-01-01
    • 2017-05-13
    • 2016-02-19
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多