我对静态方法进行了简单的单元测试,并在模拟器上运行它们。 (目标是在云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')
}
}
错误日志
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.
什么可能产生此错误?
答案 0 :(得分:9)
简要回复:
This似乎是关于java.lang.IncompatibleClassChangeError
的良好链接。如果你在CI上试一试:
在等待设备之后,Emulator没有完全启动,它没有为您的测试做好准备,并且由于超时而未安装您的应用程序,因此没有执行任何测试,并且构建失败,因为添加了新行为以提醒您它
您可以将adb wait-for-device
替换为等待stopped
状态(完全启动)的循环,将adb -e shell getprop init.svc.bootanim
检查为公共域中的this script。 Further info here
可能的CI问题,Double Espresso已弃用且Espresso 2.0已发布:
关于CI,未找到任何测试:
我回答了另一个问题but specific for Travis-ci here。类似的错误,但由于使用的脚本被窃听。如果您运行gradle installDebug --debug
,您将了解有关错误的更多信息(在此处共享日志)。
但是在CI服务器上运行相同的步骤,如果我是对的,你会看到由ShellCommandUnresponsiveException导致的InstallException由于两分钟INSTALL_TIMEOUT
。您可以使用环境变量ADB_INSTALL_TIMEOUT=6
#minutes来增加此值,但这不是您现在的问题。
如果您首先在本地运行它,请在没有-no-window
的情况下尝试(因此您看到它)或添加-no-boot-anim
(加速它但与wait-for-emulator脚本不兼容)或使用{ {1}}(确保模拟器完全启动)。
关于Espresso:
Double Espresso is deprecated因为Espresso 2.0 is now available。 Double Espresso是Espresso 1.1的纯Gradle端口,Jake Wharton在两周前发布2.0版时弃用它。
他们updated the wiki和JavaDoc (they will move it to android.com)。
You can now use the Android Support Repository to download the latest version.
Google published new samples:
示例先决条件:Android SDK v21,Android Build Tools v21.1.2, Android支持存储库。
这些示例使用Gradle构建系统。要构建项目,请输入 项目目录并使用./gradlew汇编命令或使用 Android Studio中的“导入项目”。使用./gradlew connectedCheck 在连接的仿真器或设备上运行测试。
关于Gradle任务:
来自Android tasks和Running tests(Gradle插件用户指南):
adb wait-for-device && sleep 300
组装项目输出的任务assemble
运行需要连接设备或模拟器的检查。使用名为connectedCheck
的锚点任务启动需要连接设备的检查。这取决于任务androidTest,因此将运行它。此任务执行以下操作:
所以我认为:
connectedCheck
任务,可以install*
替换assemble
(包括build
)并使用lint
(包括connectedCheck
})。connectedAndroidTest