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

JaCoCo缺少可执行文件问题

武向文
2023-03-14

我有一个小的Maven应用程序,它使用JaCoCo进行测试覆盖报告。我不断得到以下错误:

由于缺少执行数据文件,正在跳过JaCoCo执行

这是我的POM。xml文件。我自己删除了项目元素。

<modelVersion>4.0.0</modelVersion>

<groupId>de.mathema.www</groupId>
<artifactId>jacoco_sample_app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>jacoco_sample_app</name>
<url>http://maven.apache.org</url>

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
</dependencies>

<build>
  <plugins>

    <plugin>
      <groupId>org.jacoco</groupId>
      <artifactId>jacoco-maven-plugin</artifactId>
      <version>0.7.6.201602180812</version>
      <executions>
        <execution>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
          <id>report</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>report</goal>
          </goals>
        </execution>
      </executions>
    </plugin>           
  </plugins>
</build>

这是我的主类,它位于src /主/java结构下:

public class Punkt {
    private Double x;
    private Double y;

    public Punkt(Double x,Double y) {
        this.x = x;
        this.y = y;
    }

    public Punkt(Punkt zweiterPunkt) {
        this.x = zweiterPunkt.x;
        this.y = zweiterPunkt.y;
    }

    public Double getX() {
        return x;
    }

    public void setX(Double x) {
        this.x = x;
    }

    public Double getY() {
        return y;
    }

    public void setY(Double y) {
        this.y = y;
    }

    public boolean punkteVergleichen(Punkt zweiterPunkt) {
        return this.getX().equals(zweiterPunkt.getX()) &&  
       this.getY().equals(zweiterPunkt.getY());

    }
    public String toString() {
        return "("+this.x+","+this.y+")";
    }

}

这是带有单元测试的类,它位于src /测试/ java结构下:

public class PunktUnitTests {

    @Test
    public void PunkteVergleichen()  throws Exception {
        //a(10.0, 20.0)
        Punkt a = new Punkt(10.0,20.0);

        //b(30.0,40.0)
        Punkt b = new Punkt(30.0,40.0);

        //Der Fall X1!=X2 und Y1!=Y2
        //a(10.0,20.0) und b(30.0,40.0) sind unterschiedlich
        assertFalse(a.punkteVergleichen(b));

        //Der Fall X1 == X2 && Y1 == Y2
        //a(10.0,20.0) und c(10.0,20.0) sind gleich
        Punkt c = new Punkt(a);
        assertTrue(a.punkteVergleichen(a));

        //Der Fall X1 == X2 && Y1 != Y2
        //a(10.0,20.0) und c(10.0,90.0) sind unterschiedlich
        c.setX(10.0);c.setY(90.0);

        assertFalse(a.punkteVergleichen(c));
    }
}

我该如何解决这个问题?

共有1个答案

顾炎彬
2023-03-14

尽管消息可能有点误导,但JaCoCo Maven插件会在没有运行测试时发出此警告。这是您的问题:默认情况下,Maven Surefire插件执行遵循特定命名约定的测试,即:

    < Li > < code > * */Test *。Java " ; < Li > < code > * */* test . Java " ; < li >和< code > * */* test case . Java " 。

但您的测试名为PunktUnitTests,后面有一个“s”,它会导致它无法执行。因此,会发生以下情况:Surefire插件未运行任何测试,因此从未使用JaCoCo代理,因此,不会创建执行数据文件。

这里的简单解决方案是根据Surefire插件的约定重命名您的测试,即< code > punkunittest 。

另一种解决方案是配置插件以执行以“s”结尾的测试:

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19.1</version>
  <configuration>
    <includes>
      <include>**/*Tests.java</include>
    </includes>
  </configuration>
</plugin>

请注意,如果您想防止将来出现这样的错误,您可以通过将< code>failIfNoTests参数设置为< code>true来将Surefire插件配置为在没有测试运行的情况下失败。

 类似资料:
  • 问题内容: 我们有一个Maven多模块项目,其中包含一个父级(HelloWorld)和不同的子级(HelloWorldServices和HelloWorldPresentation),并使用Jenkins进行构建。 运行成功的测试后的错误是 前面的线说 这是我定义父pom JaCoCo插件的方式: 我没有明确提到过surefire。我还尝试了到处都可以找到的将argLine放入配置中的结果,但是所

  • 我们有一个Maven多模块项目,由父级(HelloWorld)和不同的子级(HelloWorldServices和HelloWorldPresentation)组成,并使用Jenkins进行构建。 运行成功测试后的错误是

  • 我正在使用 Maven 3.8.3、JUnit 5.4.2 和 Jacoco 0.8.2,并且我正在尝试创建测试覆盖率报告。 我有一个只有单元测试的项目,但我无法运行报告,我反复收到错误:由于运行时缺少执行数据文件而跳过JaCoCo执行: 以下是我的pom的配置方式: 任何想法,我错过了什么配置?

  • 我得到了 我错过了什么?

  • 问题内容: 我只有一行用python编写的代码,并带有pyinstaller和option 。exe文件为4577 kB,几乎是5Mb。如何减小其大小或排除某些自动捆绑的图书馆? 问题答案: 您使用pyinstaller创建的.exe文件包括python解释器和脚本中包含的所有模块。也许您正在使用的模块本身都有一个很大的库。但是,您可以尝试使用 py2exe, 但它可能不适用于所有项目。另一种缩小

  • 我也看了几个Youtube视频,但似乎没有一个能解决这个问题。 为什么-属性没有正确地嵌入到jar的清单中,如何修复它?