在具有单独模块

时间:2016-02-01 14:51:57

标签: android android-testing

我正在尝试设置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

3 个答案:

答案 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

希望它有所帮助。