尝试运行Android Espresso测试时,junit runner无法实例化/查找您正在测试的类。这可以通过更新build.gradle文件来解决,但为什么需要这样做?感谢您的任何见解!
例如,以下行将创建如下所示的异常。
junit test:
@Rule
public ActivityTestRule<ChurchesActivity> mChurchesActivityTestRule =
new ActivityTestRule<>(ChurchesActivity.class);
运行测试时生成异常:
junit.framework.AssertionFailedError:构造函数中的异常: toolbarHasApplicationName(java.lang.NoClassDefFoundError: es.unizar.vv.mobile.catmdedit.app.view.ChurchesActivity
通过更新build.gradle以排除特定组/模块(见下文)解决了此问题,但为什么需要这样做?
dependencies {
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4'
exclude module: 'recyclerview-v7'
}
}
这个问题是对以下问题的跟进:
答案 0 :(得分:2)
需要它,因为在使用Gradle时,您可能会遇到与传递依赖项(您要使用的库包含的依赖项)的版本冲突。您可以阅读更多相关信息here。
因此,例如, espresso-contrib 库可能具有与应用程序依赖项中引用的库不同的 recyclerview-v7 库版本。因此,您可以将其排除,也可以使用以下内容明确说明要使用的库版本:
ext {
supportLibraryVersion = '23.1.1'
}
configurations.all {
resolutionStrategy.force "com.android.support:support-annotations:$supportLibraryVersion"
resolutionStrategy.force "com.android.support:recyclerview-v7:$supportLibraryVersion"
resolutionStrategy.force "com.android.support:support-v4:$supportLibraryVersion"
}
答案 1 :(得分:0)
似乎是Android工作室中的一个错误。据报道here并且应该在android gradle插件2.0 +中修复。