【问题标题】:Java library for command line Code Coverage calculation? [closed]用于命令行代码覆盖率计算的 Java 库? [关闭]
【发布时间】:2019-12-30 17:55:38
【问题描述】:

我正在编写一个Java程序(使用swing UI),它以一个java程序(带有main函数的.java文件)和一个包含大量测试用例的excel文件作为输入。

然后它使用遗传算法返回一个有限大小的小测试用例子集,根据标准是最佳的。

这些标准之一是代码覆盖率。

我可以轻松编写一个在 cli 中运行命令并读取输出的适应度函数。唯一的问题是我需要一个在命令行中运行并返回代码覆盖率值(字节码或任何其他级别)的工具。我的适应度函数会读取这个代码覆盖率值,然后尝试为整个子集最大化它。

底线:- 我需要一个工具来检查 *.java 文件的代码覆盖率。

在我的情况下有 2 个类:-

TestingClass.java

import interest_calculator.CompoundInterest;

public class TestingClass {

    static CompoundInterest obj;
    public static final int ARGS_COUNT = 3;

    public static void main( String[] args ) {
        initializeClass();
        setValues( args );
        printResult();
    }

    private static void initializeClass() {
        obj = new CompoundInterest();
    }

    private static void setValues( String[] args ) {
        obj.principle = Double.parseDouble(args[0]);
        obj.rate = Double.parseDouble(args[1]);
        obj.time = Double.parseDouble(args[2]);
    }

    private static void printResult() {
        System.out.println( obj.calcCompoundInterest() );
    }

}

CompoundInterest.java(在子文件夹“interest_calculator”中):-

package interest_calculator;

public class CompoundInterest {

    public double principle;
    public double rate;
    public double time;

    public double calcCompoundInterest() {
        double ci = principle * ( java.lang.Math.pow((1 + rate / 100), time) );
        ci = round( ci, 2 );
        return ci;
    }

    public double round(double value, int places) {
        if (places < 0) throw new IllegalArgumentException();

        long factor = (long) Math.pow(10, places);
        value = value * factor;
        long tmp = Math.round(value);
        return (double) tmp / factor;
    }

}

我需要一个工具,让我使用三个命令行参数从命令行调用 TestingClass,并返回任何类型的代码覆盖率(字面意思是任何类型)。我只需要演示用于代码覆盖的遗传算法的工作原理。

有没有 suh 工具。以及我如何使用该工具来计算程序的命令行参数的代码覆盖率。

顺便说一下,遗传算法适用于其他标准。为此,我正在使用 Jenetics 库。

【问题讨论】:

  • code covergar 没有任何意义,尤其是像您在 fittness 中所做的应用程序级别测试。更重要的是您无法衡量的需求覆盖率--- 说了这么多:你看过cobertura吗?
  • 大声笑 - 我只能通过查看您的代码来告诉您代码覆盖率。你的主班有 100%,另一班有 0%

标签: java unit-testing testing code-coverage jacoco


【解决方案1】:

Java 有两个常用的代码覆盖工具CoberturaJacoco。通常,这些用于测量单元测试并与构建工具(如 maven 和 gradle)紧密集成。有几个选项供您选择:

  1. 如果您使用的是构建工具,例如maven 或 gradle,您可以创建一个构建目标来运行您的测试类(使用适当的参数),然后将其插入到正确的位置以测量覆盖率。

  2. 您可以将测试重构为 JUnit 测试,这将确保可以以上述两种工具的常规方式测量覆盖率。

  3. 您可以在应用程序的运行时测量代码覆盖率。这可以通过 Jacoco 来完成,它将检测 JVM 而不是类文件。

根据您的问题,我相信选项 3 是您正在寻找的选项。 DZone 有一个tutorial,它解释了如何实现这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2017-01-03
    相关资源
    最近更新 更多