我正在尝试设置Android Testing Blueprint中描述的测试项目,但我收到以下NoClassDefFoundError:
java.lang.NoClassDefFoundError: android.test.mock.MockContentResolver
Android Studio正确解析了这一点,但在运行时我收到此错误。
值得注意的是,我在app项目中没有androidTest配置,而是只有一个单独的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
答案 0 :(得分:4)
正如@rds所说,测试包不是设备框架的一部分,因此您需要包含该包。
似乎com.android.test插件没有添加这些类,所以你可以通过添加
来修复它compile 'com.google.android:android-test:4.1.1.4'
在您应用插件的模块的依赖项中。
答案 1 :(得分:1)
MockContentProvider不是框架的一部分,它只在SDK中附带用于测试apks。
在Android Studio项目中,您必须将本地单元测试的源文件存储在特定的源目录(
下src/test/java
)
答案 2 :(得分:1)
某些Android软件包不会自动链接,但您必须使用<uses-library>
标记明确指定它们。 android.test
包(see uses-library docs)就是这种情况,如@rds所述。
如果您有minSdkVersion > =15
,则添加编译依赖项将起作用,但会添加最近一次在2012年8月24日更新的旧版Maven工件。
恕我直言,将以下代码段添加到测试模块的清单中可能是更好的解决方案:
<application>
<uses-library android:name="android.test.runner" />
</application>
这将告诉系统包含android.test
包,因此类加载器将找到MockContentResolver
。
希望它有所帮助。