gpt4 book ai didi

java - 如何使用 Java 正确运行 Eclemma 覆盖

转载 作者:行者123 更新时间:2023-12-01 11:08:28 26 4
gpt4 key购买 nike

我们使用非 java 测试。他们每个人都执行我们用 Java 编写的工具。
我正在尝试使用 Eclemma 创建测试的覆盖率报告。
让我们从一项测试开始。我们用 build.xml 编译代码.我想以某种方式为每个测试创建一个覆盖率报告,然后将它们合并到一个主报告中。
我发现Jacoco has CMD interface我可以用来合并这些报告。但我不明白如何使用覆盖包运行该工具?

  • 我应该使用哪个保险套餐?是 Eclemma 还是 Jacoco?
  • 如何使用覆盖包运行该工具?我应该将它添加到 build.xml 文件中吗?我应该将它添加到命令行吗?

  • 我对Java中覆盖的整个想法有点困惑。在 Python 和 Perl 等动态语言中,我只使用覆盖率模块执行代码,该模块会创建覆盖率报告。

    我们用来执行 out 工具的命令:
    gandu -vm /usr/pkgs/java/1.6.0.25-64/bin/java -configuration /.ganduData -data /.ganduData -configuration /ganduInternalConfig --session_id 1582722179

    我应该添加一些选项吗?

    内置 build.xml :
    <target name="pde-build" depends="clean, init">
    <java classname="org.eclipse.equinox.launcher.Main" fork="true" failonerror="true">
    <arg value="-application" />
    <arg value="org.eclipse.ant.core.antRunner" />
    <arg value="-buildfile" />
    <arg value="${eclipseLocation}/plugins/org.eclipse.pde.build_${pdeBuildPluginVersion}/scripts/productBuild/productBuild.xml" />
    <arg value="-Dtimestamp=${timestamp}" />
    <classpath>
    <pathelement location="${eclipseLocation}/plugins/org.eclipse.equinox.launcher_${equinoxLauncherPluginVersion}.jar" />
    </classpath>
    </java>
    </target>

    我应该添加以下命令吗?
    <arg value="-autVMArgs" />      
    <arg value="-Xmx800m;-XX:MaxPermSize=600M;-javaagent:${jacoco-agent-path}=destfile=${jacoco-report},append=true"/>

    更新:感谢这两个答案,我设法使用 CLI 创建了报告。但看起来它显示(几乎)零覆盖率。它在我看到已执行的打印行上显示红色(未覆盖)(它们被打印到标准输出)。

    该项目包含很多包,但第一次尝试我正在尝试为特定包创建覆盖率报告。我跑了:
    gandu -vm /usr/pkgs/java/1.6.0.25-64/bin/java -configuration /.ganduData -data /.ganduData --session_id 1583967465 -vmargs -Xmx256m -Xms128m -javaagent:/jacoco_coverage/jacoco-0.8.5/lib/jacocoagent.jar

    然后我跑了:
    /usr/pkgs/java/1.6.0.16-64/bin/java -jar /jacoco_coverage/jacoco-0.8.5/lib/jacococli.jar report jacoco.exec --classfiles /gandu_repo/com.core.gandu/bin/ --html temp_dir --sourcefiles /gandu_repo/com.core.gandu/src/

    输出:
    [WARN] Some classes do not match with execution data.
    [WARN] For report generation the same class files must be used as at runtime.
    [WARN] Execution data for class <PATH> does not match.
    [INFO] Analyzing 8 classes.

    我很难理解 classfilessourcefiles .我要覆盖的文件是 Application .在 bin我有一些内部文件夹 Application.classsrc我有一些内部文件夹 Application.java .我什至尝试在 classfiles 中添加这些文件的完整路径和 sourcefiles但仍然没有覆盖(全红)。可能是什么问题呢?
    工具的结构:
    根目录包含很多包,每个包都有文件夹 binsrc .每个 src包含带有 Java 文件的递归文件夹。 bin class 具有相同的结构文件。

    最佳答案

    As I know, the only place to add java agent is in the configuration of the unit tests.



    应将代理添加到执行被测应用程序的 JVM。 您的困惑可能来自这样一个事实,即通常单元测试是在与被测代码相同的 JVM 中执行的。

    根据您的描述,不清楚带有应用程序的 JVM 是如何启动的。

    但是请考虑关注 src/Main.java举个例子:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;

    public class Main {

    public static void main(String[] args) throws Exception {
    String input;
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
    input = reader.readLine();
    }
    if ("hello".equals(input)) {
    System.out.println("Hello, World!");
    }
    }

    }

    编译后
    javac -d classes src/Main.java

    此应用程序可以在 JVM 中使用 JaCoCo Java Agent 执行取自 JaCoCo zip distribution如下
    java -javaagent:jacoco/lib/jacocoagent.jar -cp classes Main

    然后执行测试 - 例如在这种情况下手动输入“你好”。

    JVM 正常终止后,你会得到 jacoco.exec文件。

    通过这个 jacoco.exec ,源文件和类文件到 JaCoCo Command Line Interface您可以创建 HTML 报告:
    java -jar jacoco/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --html report

    report

    Which coverage package should I use? Is it Eclemma or Jacoco?



    EclEmma 是一个基于 JaCoCo 的 Eclipse IDE 插件。

    如果为了测试您从 Eclipse IDE 执行应用程序,那么您可以使用 EclEmma 使用 JaCoCo 启动它。下面是在 Eclipse IDE 中执行的相同示例:

    EclEmma

    但是,这不适用于其他场景,例如 Ant 构建。

    How do I run the tool with the coverage package? Should I add it into the build.xml file? Should I add it to the command line?



    这取决于你如何执行你的应用程序——如果你的应用程序是由 Ant 执行的测试,那么你可以使用 JaCoCo Ant Tasks用于代理的配置和报告的生成。例如, build.xmlsrc/Example.java 生成相同报告的 Ant如上述命令:
    <project xmlns:jacoco="antlib:org.jacoco.ant" name="Example Ant Build with JaCoCo" default="rebuild">

    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
    <classpath path="jacoco/lib/jacocoant.jar"/>
    </taskdef>

    <target name="clean">
    <delete dir="classes"/>
    <delete dir="report"/>
    <delete file="jacoco.exec"/>
    </target>

    <target name="compile">
    <mkdir dir="classes"/>
    <javac srcdir="src" destdir="classes" debug="true" includeantruntime="false"/>
    </target>

    <target name="run" depends="compile">
    <jacoco:agent property="jacocoAgent" />

    <java classname="Main" fork="true">
    <classpath path="classes"/>
    <jvmarg value="${jacocoAgent}"/>
    </java>
    </target>

    <target name="report" depends="run">
    <jacoco:report>
    <executiondata>
    <file file="jacoco.exec"/>
    </executiondata>
    <structure name="JaCoCo Ant Example">
    <classfiles>
    <fileset dir="classes"/>
    </classfiles>
    <sourcefiles encoding="UTF-8">
    <fileset dir="src"/>
    </sourcefiles>
    </structure>
    <html destdir="report"/>
    </jacoco:report>
    </target>

    <target name="rebuild" depends="clean,report"/>

    </project>

    如果应用程序是由一些自定义的自制工具执行的,那么直接将代理添加到命令行可能会更好。

    关于java - 如何使用 Java 正确运行 Eclemma 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60410541/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com