Emm*_*mma 3 junit android gradle android-emulator android-espresso
我有一个简单的单元测试静态方法并在模拟器上运行它们.(目标是在云CI上运行,因此我在模拟器上进行测试.)
Gradle 2.2.1仿真器Android 5.0
我在控制台上使用这些步骤.
的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')
}
}
Run Code Online (Sandbox Code Playgroud)
错误日志是
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.
Run Code Online (Sandbox Code Playgroud)
什么会产生这个错误?
简要回复:
这似乎是一个很好的联系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 SDK v21,Android Build Tools v21.1.2,Android支持存储库.
这些示例使用Gradle构建系统.要构建项目,请输入项目目录并使用./gradlew汇编命令或使用Android Studio中的"导入项目".使用./gradlew connectedCheck在连接的仿真器或设备上运行测试.
关于Gradle任务:
从Android任务和运行测试(Gradle插件用户指南):
assemble 组装项目输出的任务connectedCheck 运行需要连接设备或仿真器的检查.需要连接设备的检查是在调用锚点任务的情况下启动的connectedCheck.这取决于任务androidTest,因此将运行它.此任务执行以下操作:
所以我认为:
install*任务,可以替换assemble为build(包括lint)和使用connectedCheck(包括connectedAndroidTest).- echo no | android create avd -f -n test -t $ANDROID_TARGET -b $ANDROID_ABI| 归档时间: |
|
| 查看次数: |
3092 次 |
| 最近记录: |