【发布时间】:2014-12-29 19:50:38
【问题描述】:
我有一个静态方法的简单单元测试并在模拟器上运行它们。 (目标是在云 CI 上运行,所以我在模拟器上进行测试。)
Gradle 2.2.1 模拟器安卓5.0
我在控制台上使用这些步骤。
- android create avd --force -n test -t "android-21"
- 模拟器 -avd 测试 -no-skin -no-audio -no-window &
- adb 等待设备
- adb shell 输入 keyevent 82 &
- gradle clean installDebug
- gradle connectedAndroidTest
build.gradle
dependencies {
...
androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
exclude group: 'com.squareup.dagger'
exclude group: 'com.squareup.dagger:dagger:1.2.1'
}
}
android {
compileSdkVersion 21
buildToolsVersion "21.1"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
sourceSets {
androidTest.setRoot('src/androidTest')
}
}
错误日志是
Tests on test(AVD) - 5.0 failed: Instrumentation run failed due to 'java.lang.IncompatibleClassChangeError'
com.android.builder.testing.ConnectedDevice > hasTests[test(AVD) - 5.0] FAILED
No tests found.
什么会产生这个错误?
【问题讨论】:
-
你能从 logcat 发布完整的 IncompatibleClassChangeError 堆栈跟踪吗?此外,众所周知,Espresso 1.1 在 API 21 设备上存在问题(尽管我认为这不是问题所在)
-
你可能是对的!我将 Espresso 更新到 2.0,然后错误消失了。
-
如何知道我们应该添加哪些库作为依赖项以及排除哪些组/模块?
-
如果这是一个普遍的问题,那完全取决于您的项目需要什么和不需要什么。在我的 espresso 和 dagger 的具体示例中,我想在没有任何依赖注入(dagger)的情况下进行简单的 espresso 测试,所以我添加了 espresso 但排除了 dagger。
标签: android junit gradle android-emulator android-espresso