問題描述
我的 android 應用程序使用以下配置:
My android application uses the following config:
- Gradle - 0.12.+
build.gradle 文件的內容
Contents of build.gradle file
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
repositories {
mavenLocal()
mavenCentral()
}
apply plugin: 'com.android.library'
apply plugin: "jacoco"
dependencies {
compile 'commons-collections:commons-collections:3.2.1'
compile 'org.slf4j:slf4j-android:1.6.1-RC1'
// dependency injection
compile('org.roboguice:roboguice:2.0') {
exclude module: 'cglib'
exclude module: 'aopalliance'
exclude module: 'guice'
}
compile files('libs/guice-3.0-no_aop.jar')
compile 'javax.inject:javax.inject:1'
/*
* Test dependencies.
*/
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0'
}
android {
buildToolsVersion "20.0"
compileSdkVersion 19
buildTypes {
debug {
runProguard false
testCoverageEnabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 100
versionName "1.0.0"
}
/*
* Workaround for packaging bug in Android Gradle plugin regarding duplicate files.
*/
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'LICENSE.txt'
}
}
當屬性 testCoverageEnabled 設置為 false 時,我的所有測試都會成功運行.將其設置為 true 時,運行測試時會引發以下異常
All my tests run successfully when property testCoverageEnabled is set to false. On setting it to true, the following exception is thrown when running the tests
Caused by: java.lang.VerifyError: *** Some class ***
at dalvik.system.DexFile.defineClass(Native Method)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:211)
at dalvik.system.DexPathList.findClass(DexPathList.java:313)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:51)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
當在測試中初始化模擬時,錯誤發生在行上.
The error happens on the line when mocks are initialised within the tests.
有沒有人設法為使用 mockito 庫進行測試的 android 應用程序生成代碼覆蓋率指標?
Has anyone managed to generate code coverage metrics for android application which uses mockito library for testing?
推薦答案
以下鏈接對我遇到的問題非常有用:http://www.androidpuzzles.com/168_17620080/
The following link was very useful in explaining the problem I encountered: http://www.androidpuzzles.com/168_17620080/
隨后我將源和目標兼容性設置切換到 Java 1.5,并且能夠運行單元和 UI 測試(使用 mockito 和 espresso)并使用 Jacoco 生成代碼覆蓋率報告.
I subsequently switched the source and target compatibility settings to Java 1.5 and I was able to run the unit and UI tests (which used both mockito and espresso) and generate code coverage report using Jacoco.
如果我必須保留 Java 1.7 設置,解決方法是將被測試類中私有方法的范圍更改為受保護或公共范圍.這將允許我生成代碼覆蓋率報告(克服包含的鏈接中確定的問題).
If I had to retain Java 1.7 settings, the workaround would have been to change the scope of private methods in the class being tested to either protected or public scope. This would have then allowed me to generate the code coverage report (overcoming the issue as identified in the link included).
這篇關于使用 mockito 庫的 android 應用程序的 Jacoco 代碼覆蓋率的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!