Java 用于计算命令行代码覆盖率的库?

Java library for command line Code Coverage calculation?

我正在编写一个 Java 程序(使用 swing UI),它需要一个 java 程序(.java 具有主要功能的文件)和一个 excel 大量测试用例文件作为输入。

然后它使用遗传算法 return 根据标准最好的测试用例的有限大小的小子集。

其中一个标准是代码覆盖率。

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

底线:- 我需要一个工具来检查 *.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,并且 return 可以覆盖任何类型的代码(几乎任何类型)。我只需要演示用于代码覆盖的遗传算法的工作原理。

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

顺便说一句,遗传算法正在为其他标准工作。为此,我正在使用 Jenetics 库。

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

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

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

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

根据您的问题,我认为选项 3 是您要找的那个。 DZone 有一个 tutorial 解释了如何实现这一点。