在具有单独模块的 Android 测试项目中找不到 MockContentResolver

MockContentResolver is not found in an Android Test project with separate module

我正在尝试设置一个测试项目,如 Android Testing Blueprint 中所述,但我收到以下 NoClassDefFoundError:

java.lang.NoClassDefFoundError: android.test.mock.MockContentResolver

Android Studio 正确解决了这个问题,但是当 运行 我收到这个错误。

值得注意的是,我在应用程序项目上没有 android 测试配置,相反,我只有一个单独的 tests 模块:

apply plugin: 'com.android.test'

我正在 运行 进行这样的测试:

 ./gradlew :tests:connectedAndroidTest

可在此处找到重现此问题的测试项目: https://github.com/vexdev/android-testing-templates/tree/master/AndroidTestingBlueprint

编辑:也在 Android Development community

上询问

编辑:还创建了以下 android 问题: https://code.google.com/p/android/issues/detail?id=200182&thanks=200182&ts=1454489567

MockContentProvider 不是框架的一部分,它仅包含在用于测试 apk 的 SDK 中。

In your Android Studio project, you must store the source files for local unit tests under a specific source directory (src/test/java)

正如@rds所说,测试包不是设备框架的一部分,因此您需要包含该包。

似乎 com.android.test 插件没有添加那些 类,所以你可以通过添加

来修复它
compile 'com.google.android:android-test:4.1.1.4'

在您应用插件的模块的依赖项中。

一些 android 包不会自动链接,但您必须使用 <uses-library> 标记明确指定它们。 android.test 包就是这种情况(提到see uses-library docs), like @rds

如果您有 minSdkVersion > =15,添加编译依赖项将起作用,但会添加最后一次更新于 2012 年 8 月 24 日的遗留 Maven 工件。

恕我直言,将以下代码片段添加到测试模块的清单中可能是更好的解决方案:

<application> <uses-library android:name="android.test.runner" /> </application>

这将告诉系统也包含 android.test 包,因此 class 加载程序将找到 MockContentResolver

希望对您有所帮助。