作者:我是你的特效 | 来源:互联网 | 2023-05-29 10:08
如何解决《模拟器上的GradleJUnitEspressoconnectedAndroidTestjava.lang.IncompatibleClassChangeError》经验,为你挑选了1个好方法。
我有一个简单的单元测试静态方法并在模拟器上运行它们.(目标是在云CI上运行,因此我在模拟器上进行测试.)
Gradle 2.2.1仿真器Android 5.0
我在控制台上使用这些步骤.
android create avd --force -n test -t"android-21"
模拟器-avd test -no-skin -no-audio -no-window&
adb wait-for-device
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.
什么会产生这个错误?
1> albodelu..:
简要回复:
这似乎是一个很好的联系java.lang.IncompatibleClassChangeError
.如果你在CI上尝试:
在等待设备之后,仿真器没有完全启动,它没有为您的测试做好准备,并且由于超时而未安装您的应用程序,因此没有执行测试,并且构建失败,因为添加了新行为以提醒您.
您可以adb wait-for-device
通过等待stopped
状态(完全启动)检查的循环替换,adb -e shell getprop init.svc.bootanim
因为公共域中的此脚本会执行此操作.更多信息在这里.
可能的CI问题,Double Espresso已弃用且Espresso 2.0已发布:
关于CI,没有发现任何测试:
我在这里回答了另一个问题,但具体针对Travis-ci.类似的错误,但由于使用的脚本被窃听.如果您运行,gradle installDebug --debug
您将了解有关错误的更多信息(在此处共享日志).
但是在CI服务器上运行相同的步骤,如果我是对的,你会看到由ShellCommandUnresponsiveException引起的InstallException两分钟INSTALL_TIMEOUT
.您可以使用环境变量ADB_INSTALL_TIMEOUT=6
#minutes 来增加此值,但这不是您现在的问题.
如果您首先在本地运行它,请尝试不要-no-window
(所以你看到它)或添加-no-boot-anim
(加速它但与wait-for-emulator脚本不兼容)或使用adb wait-for-device && sleep 300
(以确保模拟器完全启动).
关于Espresso:
Double Espresso已弃用,因为Espresso 2.0现已推出.Double Espresso是Espresso 1.1的纯Gradle端口,Jake Wharton在两周前发布2.0版时弃用了它.
他们更新了wiki 和JavaDoc(他们将其移至android.com).
您现在可以使用Android支持存储库下载最新版本.
谷歌发布了新样本:
示例先决条件:Android SDK v21,Android Build Tools v21.1.2,Android支持存储库.
这些示例使用Gradle构建系统.要构建项目,请输入项目目录并使用./gradlew汇编命令或使用Android Studio中的"导入项目".使用./gradlew connectedCheck在连接的仿真器或设备上运行测试.
关于Gradle任务:
从Android任务和运行测试(Gradle插件用户指南):
assemble
组装项目输出的任务
connectedCheck
运行需要连接设备或仿真器的检查.
需要连接设备的检查是在调用锚点任务的情况下启动的connectedCheck
.这取决于任务androidTest,因此将运行它.此任务执行以下操作:
确保构建应用程序和测试应用程序(取决于assembleDebug和assembleTest)
安装两个应用
运行测试
卸载这两个应用.
所以我认为:
这是迁移到Espresso 2.0(并避免依赖性?问题)的好时机.
你需要等待模拟器停止状态,我建议这个链接来理解它.
您不需要特定install*
任务,可以替换assemble
为build
(包括lint
)和使用connectedCheck
(包括connectedAndroidTest
).
如果安装了多个ABI,您需要选择一个(并回答否): - echo no | android create avd -f -n test -t $ANDROID_TARGET -b $ANDROID_ABI
我会在您选择的CI服务器上尝试他们的样本,作为遵循目标的第二步.