我正在尝试使用Gradle Android插件0.10.2获取测试覆盖率报告.但是在运行一些测试后我仍然无法获得覆盖率报告.(connectedAndroidTest).
我的主模块的build.gradle是:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
testCoverageEnabled true
}
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
}
Run Code Online (Sandbox Code Playgroud)
而project的build gradle的buildscript部分是:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我gradlew connectedAndroidTest从终端运行,我可以在文件夹中找到coverage-instrumented-classes和code-coverage文件build夹.但我coverage在reports文件夹中找不到文件夹.(只有我能看到的是androidTests文件夹) …
我是Gradle和Android测试的新手,但我已经将我的Android项目转换为使用Gradle构建.
现在,我正在尝试使用Gradle的JaCoCo插件执行Android项目的测试覆盖.
我已将以下内容添加到build.gradle文件中:
apply plugin: 'jacoco'
Run Code Online (Sandbox Code Playgroud)
当我运行"gradle jacocoTestReport"时出现以下错误:
Task 'jacocoTestReport' not found in root project '<project name>'.
Run Code Online (Sandbox Code Playgroud)
从文档我应该也应用插件'java'但它与插件'android'冲突.
有没有解决的办法?
提前致谢.
我一直试图在一段时间内安静地进行Jacoco测试覆盖.我在这些主题中尝试了几种可能的解决方案:
使用JaCoCo Gradle插件的Android测试代码覆盖率
如何使用Android gradle插件0.10.0或更高版本获取jacoco覆盖率报告?
我正在使用genymotion在一个emulatated设备中运行测试.这是我添加到build.gradle的内容:
apply plugin: 'jacoco'
android{
jacoco {
version "0.7.1.201405082137"
}
buildTypes{
debug{
testCoverageEnabled = true
}
}
}
jacoco {
toolVersion "0.7.1.201405082137"
}
Run Code Online (Sandbox Code Playgroud)
要运行它,我会使用类似的东西
./gradlew clean
./gradlew createFLAVOR_NAMEDebugCoverageReport
Run Code Online (Sandbox Code Playgroud)
相关生成的文件/文件夹是:
/build/intermediates/coverage-instrumented-classes
/build/intermediates/jacoco
/build/outputs/code-coverage/connected/flavors/MyFlavor/coverage.ec
Run Code Online (Sandbox Code Playgroud)
但是,@ build/reports/jacoco/test/html/index.html或任何html页面/代码覆盖率报告@/build/outputs都没有.
我还尝试创建一个专门的任务来构建一个覆盖率报告:
def coverageSourceDirs = [
'src/main/java',
]
task jacocoTestReport(type: JacocoReport, dependsOn: "connectedAndroidTestFLAVOR_NAMEDebug") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: './build/intermediates/classes/debug',
excludes: ['**/R*.class', …Run Code Online (Sandbox Code Playgroud) 我有一个简单的android项目与测试用例.
ProjNameProject
--build.gradle
--ProjName
----build.gradle
Run Code Online (Sandbox Code Playgroud)
我看到默认情况下,android的新构建系统默认提供基本的测试结果.(万岁!)
现在我想看看代码覆盖率.我知道如何使用Emma和Ant脚本进行设置,但是我不想在这里运行Ant脚本.我觉得这会破坏我使用新构建系统的目的.
我尝试过在Github上找到的一些Cobertura插件.特别是:https: //github.com/stevesaliman/gradle-cobertura-plugin
但是,如果我尝试在ProjName构建文件中使用插件,那么我会收到有关java插件的错误.我在tools.android.com上读到,添加java插件会产生这种行为.我没有应用它,所以cobertura插件必须.
如果我尝试在主构建文件中使用插件,那么我没有看到java错误,但现在我看到:
Could not find net.sourceforge.cobertura:cobertura:1.9.4.1.
Required by:
:ProjNameProject:unspecified
Run Code Online (Sandbox Code Playgroud)
我该怎么办??
我在build.gradle文件中添加了testCoverageEnabled = true,以便开始获取一些代码覆盖率报告.
运行我的测试我可以看到在我的构建输出文件夹中添加了代码覆盖率文件夹.但是,当达到其内容时,我看到只有一个coverage.ec文件......
为了获得最近的报告,我该如何处理此文件?或者我应该在build.gradle中添加什么才能获得完整的报告?
code-coverage jacoco eclemma android-studio android-gradle-plugin
我按照这里的说明操作:
设置我的领域单元测试.测试全部通过但是当我尝试生成代码覆盖率以推送到SonarQube时,覆盖率报告显示0%的覆盖率.当我执行标准的Android Studio代码覆盖率时(如答案中所述:如何使用Android Studio获取代码覆盖率?),它会生成一个显示91%覆盖率的报告.然而,这种方法的问题在于它是一个html报告,并且没有办法让它生成可用于SonarQube的xml报告.
这是测试类的代码
@RunWith(RobolectricTestRunner.class)
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"})
@PrepareForTest({Realm.class, RealmConfiguration.class, RealmCore.class, RealmLog.class})
@SuppressStaticInitializationFor("io.realm.internal.Util")
@Config(constants = BuildConfig.class, manifest = "src/main/AndroidManifest.xml", sdk = 21)
public class DecisionTreeTest
{
@Captor
ArgumentCaptor<Realm.Transaction.Callback> realmCallbackCaptor;
// Robolectric, Using Power Mock https://github.com/robolectric/robolectric/wiki/Using-PowerMock
@Rule
public PowerMockRule rule = new PowerMockRule();
private Context mockContext;
private final byte[] fakeRealmKey = {
-122, -115, -113, -111, -105, -104, -101, -99, -94, -93, -90, -87,
-77, -74, -67, -66, -63, -61, -56, -53, -48, -47, -33, -31, …Run Code Online (Sandbox Code Playgroud) android ×4
gradle ×4
jacoco ×4
unit-testing ×2
eclemma ×1
powermock ×1
realm ×1
robolectric ×1
testing ×1