当前位置: 首页 > 知识库问答 >
问题:

Junit的java覆盖率为0%

居琛
2023-03-14

我在所有这些过程中只使用了“命令行”,我想这样做。(不使用Ant、maven、gradle等)

我想运行 Junit 测试用例和 JaCoCo 覆盖率估计。

首先,下面是我的代码

Calculator.java

public class Calculator {
  public int evaluate(String expression) {

    int sum = 0;
    for(String summand: expression.split("\\+"))
        sum += Integer.valueOf(summand);
    System.out.println("Hello World!!");
    return sum;
  }
}

CalculatorTest.java

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CalculatorTest {
  @Test
  public void evaluatesExpression(){
    Calculator calculator = new Calculator();
    int sum = calculator.evaluate("1+2+3");
    assertEquals(6, sum);
  }
}

2个java文件位于< code>C\Cal中,< code>Cal文件夹包含4个jar文件(< code>junit-4.12.jar 、< code > ham crest-core-1.3 . jar 、< code>jacococli.jar、< code>jacocoagent.jar)

在这种情况下,我创建了class file < code > calculator . class 。

javac Calculator.java

然后,我制作了exec(我认为它是jacoco的执行文件)文件来估计计算器.java文件的单元测试覆盖率。

java -javaagent:jacocoagent.jar=destfile=jacoco.exec

之后,我使用exec文件和命令提取报告

java -jar jacococli.jar report jacoco.exec --classfiles Calculator.class --html "report" --name jacocoReport --sourcefiles "Calulator.java"

但是,我所做的html报告中的测试覆盖率为0%。

以下是我的问题:

> < li>

您知道为什么我的保险率是0%吗?

尝试提取我想要的覆盖结果有什么问题吗?

用< code>CalculatorTest.java代码计算< code>Calculator.java文件的覆盖率并提取报告时,只使用< code>Calculator.class编写< code> - classfiles是否正确?

即使在 --源文件中同时插入“计算器.java”和“计算器测试.java,结果也没有区别。我错了吗?或者 --源文件的效果是什么?

这是我参考的网页:

  • https://github.com/junit-team/junit4/wiki/Getting-started
  • 命令行中的Jacoco报告

共有1个答案

卫开济
2023-03-14

你知道为什么我的保险范围是0%吗?

即使在 --源文件中同时插入“计算器.java”和“计算器测试.java,结果也没有区别。我错了吗?或者 --源文件的效果是什么?

--sourcefiles应指向包含包的目录。在本例中,您的文件使用默认包(无包),因此--sourcefiles应指向包含Calculator.java

尝试提取我想要的覆盖结果有什么问题吗?

不,没有问题。例如具有<code>计算器。java在<code>src中的java测试src

mkdir classes
javac src/Calculator.java -d classes
mkdir test-classes
javac -cp junit-4.12.jar:classes test-src/CalculatorTest.java -d test-classes
java -javaagent:jacoco-0.8.1/lib/jacocoagent.jar -cp junit-4.12.jar:hamcrest-core-1.3.jar:classes:test-classes org.junit.runner.JUnitCore CalculatorTest
java -jar jacoco-0.8.1/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --html report

生成以下报告

用< code>CalculatorTest.java代码计算< code>Calculator.java文件的覆盖率并提取报告时,只使用< code>Calculator.class编写< code> - classfiles是否正确?

--classfiles应指向类文件,或包含类文件的目录,或包含应出现在报告中的类文件的档案<代码>计算器测试。类并没有在上面的示例中指定,所以它不会出现在报告中。如果指定:

java -jar jacoco-0.8.1/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --classfiles test-classes --sourcefiles test-src --html report
 类似资料:
  • 对不起我的英语。我对junit测试有问题。客户机要求覆盖所有类,即使是dto/model/entity(即使是错误的,我也必须这样做)。但我在测试getter和setter时遇到困难。我无法覆盖,我已经测试了许多解决方案,但要么覆盖率为0,要么出现错误,我该怎么办? 我的班级: 我的班级测试 always error,例如last when:when()需要的参数必须是“模拟的方法调用”。例如:w

  • 我不熟悉java、Junit和jacoco。我正在做下面的异常处理。我也在捕获异常类,以防该方法抛出之前未捕获的任何其他异常。 在Junit测试中,尝试如下。当我有运行时的任何异常时,我抛出的总是运行时异常捕获块本身,除非我抛出异常。我可以尝试其他哪个选中的异常,使其进入异常捕获块。因此,我无法获得所需的代码覆盖率。 谢谢你的帮助。

  • Jacoco插件在jenkins报告中显示0%的覆盖率,但当我在本地系统中运行相同的命令时,Jacoco会正确生成报告。我正在使用以下命令: mvn-s xyz/settings.xml-f xyz/xyz/pom.xml清洁安装org.jacoco 所以当我在jenkins中运行这个命令时,它会生成错误的报告。我已经检查了它在工作区目录对应的项目在詹金斯。它显示每个项目的0%覆盖率。但是当我在本

  • 这是一个重要的可量化指标,如果代码覆盖率很高,你就可以放心的修改代码,在发版本的时候也能睡个安稳觉。否则就是拆东墙补西墙,陷入无尽的 bug 诅咒中。 那么在 OpenResty 里面如何看到代码覆盖率呢?其实很简单,使用 LuaCov 可以很方便的实现。 我们先了解下 LuaCov,这是一个针对 Lua 脚本的代码覆盖率工具,通过 luarocks 来安装: luarocks install l

  • 11.3. 测试覆盖率 就其性质而言,测试不可能是完整的。计算机科学家Edsger Dijkstra曾说过:“测试能证明缺陷存在,而无法证明没有缺陷。”再多的测试也不能证明一个程序没有BUG。在最好的情况下,测试可以增强我们的信心:代码在很多重要场景下是可以正常工作的。 对待测程序执行的测试的程度称为测试的覆盖率。测试覆盖率并不能量化——即使最简单的程序的动态也是难以精确测量的——但是有启发式方法

  • 问题内容: 我正在使用Mocha测试我的NodeJS应用程序。我无法弄清楚如何使用其代码覆盖功能。我尝试使用Google搜索,但没有找到任何合适的教程。请帮忙。 问题答案: 您需要一个额外的库来覆盖代码,而伊斯坦布尔的强大和便捷将使您震惊。通过Mocha测试后,请尝试以下操作: 现在,只需将命令nyc放在现有测试命令的前面,例如: