适用于Android Espresso的空白Jacoco报告

布莱恩·西尔斯(Bryan Sills)

我正在尝试使用Espresso测试来获取我的Android项目的代码覆盖率。但是,哈科科(Jacoco)给我回了一份报告,说我什么也没做。我制作了一个演示应用程序来突出我的问题,就在这里

如果您不想转到Github来查看项目,则这里是build.gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'jacoco'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "ninja.bryansills.jacocotest"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    packagingOptions {
        exclude 'LICENSE.txt'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            testCoverageEnabled true
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'

    androidTestCompile 'com.android.support.test:runner:0.2'
    androidTestCompile 'com.android.support.test:rules:0.2'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1'
}
绍维克

根据Ligol指出的问题,这对我有用。

在androidTest中添加了自定义测试运行器

package com.example;

import android.os.Bundle;
import android.support.test.runner.AndroidJUnitRunner;
import android.util.Log;

import java.lang.reflect.Method;

public class AndroidJacocoTestRunner extends AndroidJUnitRunner {

    static {
        System.setProperty("jacoco-agent.destfile", "/data/data/"+BuildConfig.APPLICATION_ID+"/coverage.ec");
    }

    @Override
    public void finish(int resultCode, Bundle results) {
        try {
            Class rt = Class.forName("org.jacoco.agent.rt.RT");
            Method getAgent = rt.getMethod("getAgent");
            Method dump = getAgent.getReturnType().getMethod("dump", boolean.class);
            Object agent = getAgent.invoke(null);
            dump.invoke(agent, false);
        } catch (Throwable e) {
            Log.d("JACOCO", e.getMessage());
        }
        super.finish(resultCode, results);
    }
}

在app / build.gradle中使用了这个测试运行器

android{
    ...
    defaultConfig {
      ....
      testInstrumentationRunner "com.example.AndroidJacocoTestRunner"
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JaCoCo不适用于Robolectric测试

BDD框架适用于良好的报告

Android ACRA-适用于Android的应用程序崩溃报告

在适用于Android的Azure DevOps中运行JaCoCo:找不到方法jacocoTestReport()

空白:pre不适用于contenteditable

适用于Android的Google Analytics(分析):看不到“受众特征和兴趣”报告

适用于Android应用程序的最佳开源崩溃报告工具

适用于多模块项目的Maven Jacoco配置

了解适用于iOS应用的Firebase Crashlytics报告

DevExpress报告标签FormatString不适用于日期

空白的最终字段是否适用于局部变量?

适用于PHP的简单空白HTML缩小

验证不适用于检查空白字段

WHERE子句不适用于空白值

Kendo Grid排序不适用于空白数据

适用于 Android 的 isInViewport

适用于Android的DataGrid

适用于Android的chrome浏览器中的空白导航[在bootstrap网站和所有使用bootstrap的网站上也会出现此问题]

sbt-jacoco插件不适用于Java11并引发检测类错误

AppCompat库23.2.1不适用于espresso v2.2.2

无法显示子报告。子报表单独工作-不适用于主报表

为大型帐户导入报告时,适用于 Google AdWords 的 BigQuery Data Transfer Service 失败

Sage 300情报报告不适用于管理员用户

带有 ssrs 的 powerbi 报告不适用于 Web 应用程序

为什么OS.Version报告适用于Windows 8.1的Windows 8.0?

适用于Intellij IDEA的Android SDK

适用于Android的View Group的Clicklistener

适用于Android的简单Jsoup代码

适用于Android的机器学习库