【问题标题】:Android unit test support does not work in android library modulesAndroid 单元测试支持在 android 库模块中不起作用
【发布时间】:2015-03-20 09:43:22
【问题描述】:

我正在使用新的单元测试支持http://tools.android.com/tech-docs/unit-testing-support 在 android 项目上编写 junit 测试。

虽然单元测试在“com.android.application”模块上完美运行,但在“com.android.library”模块上总是失败。这没有记录在 http://tools.android.com/tech-docs/unit-testing-support 中。所以我想知道我是不是罪魁祸首。

当我在库模块上编写这些测试时,测试找不到模块上的类并且总是给出以下错误:

package does not exist

error: cannot find symbol

android 单元测试支持目前处于实验阶段,但有解决方案吗?

更新

我已将此问题添加到 android 问题跟踪器 https://code.google.com/p/android/issues/detail?id=161038

【问题讨论】:

  • 你正在使用什么 gradle 任务?你可以添加 gradle 构建日志输出吗?我在库模块中进行了工作测试,其设置与应用程序模块相同。
  • 感谢克里尔博亚希诺夫的帮助。我没有更改 android 库模块中的任务。

标签: android unit-testing junit android-gradle-plugin


【解决方案1】:

看起来编译单元测试的任务不依赖于编译库代码的任务。 以下为我修复了它:

afterEvaluate {
    tasks['assembleDebugUnitTest'].dependsOn(tasks['assembleDebug'])
}

我使用

运行测试
./gradlew testDebug

如果您不想修改build.gradle,在命令行上手动指定assembleDebug 任务也应该可以解决问题:

./gradlew assembleDebug testDebug

【讨论】:

  • 这绝对是问题所在。也是这么简单的解决方法!
  • 这修复了对库类的引用,但对引用“R”没有帮助。
【解决方案2】:

在我的 android 库项目中,我也未能让测试运行。我所做的是创建一个使用库的测试应用程序,并在应用程序中编写调用库方法的测试。

这可能不是理想的解决方案,但却是我们让它发挥作用的方式。

【讨论】:

    【解决方案3】:

    看看这里https://github.com/nenick/AndroidStudioAndRobolectric

    在那里,您可以对库和风格运行单元测试。不,你不需要像Gaurav Vashisth 所说的那样使用 Robolectric。如果你愿意,你可以。

    Here is an example of JUnit test in a library module

    【讨论】:

    • 如果你看过这个例子,你会发现你不需要 Robolectric,你也可以运行 JUnit 测试。 github.com/nenick/AndroidStudioAndRobolectric/blob/library/core/…
    • 该存储库中没有 android 库模块。
    • 感谢会调查他们
    • 您可以进入库目录并执行.././gradlew clean test,然后它将只对库执行测试命令。或./gradlew :library:clean :library:test
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多