Android单元测试支持在Android库模块中不起作用

5
我正在使用新的单元测试支持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构建日志输出吗?我在一个库模块中有工作测试,与应用程序模块的设置相同。 - Kirill Boyarshinov
感谢Kriill Boyashinov的帮助。我没有在Android库模块中更改任务。 - Gaurav Vashisth
3个回答

7

看起来编译单元测试的任务不依赖于编译库代码的任务。 以下方法对我有用:

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

我使用以下方式运行测试:
./gradlew testDebug

如果您不想修改build.gradle文件,则可以在命令行上手动指定assembleDebug任务来完成操作:

./gradlew assembleDebug testDebug

这绝对是问题所在。而且修复起来非常简单! - Mike Holler
这将修复对库类的引用,但无法解决对“R”的引用。 - FishStix

2
在我的Android库项目中,我也无法运行测试。我的解决方法是创建一个测试应用程序,该应用程序使用库并编写在应用程序中调用库方法的测试。
这可能不是理想的解决方案,但这是我们让它工作的方式。

1

如果您查看了示例,那么您就会发现您不需要Robolectric,而且您也可以运行JUnit测试。https://github.com/nenick/AndroidStudioAndRobolectric/blob/library/core/src/test/java/com/example/core/SimpleUnitCoreTest.java - Niklas
该存储库中没有 Android 库模块。 - Gaurav Vashisth
谢谢,我会研究一下它们。 - Gaurav Vashisth
你可以进入库目录并执行.././gradlew clean test,这将只为库执行测试命令。或者执行./gradlew :library:clean :library:test - Niklas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接