Junit ant 任务未将断言错误报告为失败

Posted

技术标签:

【中文标题】Junit ant 任务未将断言错误报告为失败【英文标题】:Junit ant task not reporting assertion errors as failures 【发布时间】:2021-10-29 12:17:13 【问题描述】:

我正在尝试将我的 Junit 测试结果集成到我们的 gitlab 管道中。我有一个成功的 ant 构建文件,它使用 Junit 任务和 JUnit 报告任务来创建将与 gitlab 集成的 xml 文件。

我正在使用: 爪哇 1.8, 蚂蚁 1.7.0, junit 4.4

我正在使用本教程中的一个简单示例测试类进行测试 (https://www.tutorialspoint.com/junit/junit_basic_usage.html),但我添加了一个 assertTrue(false)。

单元测试:

import org.junit.Test;
import org.junit.Assert.*;

public class MyUnitTest
   @Test
   public void testConcatenate() 
       MyUnit myUnit= new MyUnit();
       String result = myUnit.concatenate("one","two");
        assertEquals("twoone", result);
   
   @Test
   public void testAgain() 
       fail();
     

我的构建脚本如下所示:

<project name ="JUnitTest" default = "test" basedir = "." > 
   <property name = "testdir" location = [location of dir />
   <property name = "full-compile" value = "true" />
   <path ide - "classpath.test" >
      <pathelement location = "junit-4.4.jar" />
      <pathelement location = "$testdir" />
    </path>
    <target name = compile" >
       <javac srcdir = "$srcdir" destdir = "$testdir" >
          <classpath refid ="classpath.test" />
       </javac>
     </target>
            
  <target name = "test" depends = "compile" >

    <junit haltonfailure ="no" >
    <classpath [my classpath here]>
    <formatted type = "xml" />
    <test name = "MyUnitTest" 
       todir = "$testdir" />
    </junit>
 </target>

我正在使用以下命令运行: ant -buildfile testBuild.xml

命令行的输出将测试报告为 FAILED。但是,当我查看 xml 报告时,它显示 0 个失败和 1 个错误。当我在命令行中使用 JUnitCore 运行时,这也会报告失败而不是错误。我已验证所有 ort.junit.Assert 语句都会导致断言错误,该错误在测试报告中报告为错误而不是失败。我能找到的大多数文档都说这应该输出失败。 fail() 确实会导致测试失败。

我希望失败的断言语句导致报告测试失败。这使我能够区分失败的测试或单元测试代码中有错误的测试。有没有办法配置生成的 xml 报告以将断言错误报告为失败?

编辑:我发现一种解决方法是在测试用例周围添加一个 try 块

       catch (AssertionError ae) 
         fail(ae.toString());
       

但是,从文档中,我读到这应该是不必要的。另外,由于我正在从事一个大型项目,因此将其添加到每个测试中都需要很长时间。此外,我会担心无法捕捉到真正的错误以及在 ant 之外运行的兼容性问题。此外,要找到故障的根源并不容易。所以我希望能找到更好的解决方案。

【问题讨论】:

您的设置不可复制。您能否编辑您的问题并添加完整的 ant 脚本文件以及您的测试用例代码。您使用的是哪个 Java 和 JUnit 版本? @AndersLindgren 我更新了我的问题。我无法发布代码,因为我正在使用的虚拟机没有连接到互联网,但我在这里重新输入了。 【参考方案1】:

您的 ant 文件中有一些小错误,因此您必须仔细阅读 ant 手册以了解所有信息。

如果你调用你的 ant 文件 build.xml 你可以调用 ant 而不给出 -buildfile 标志。

我在我的项目目录中创建了以下目录

build
java
junit-results
lib
test

并将junit-4.4.jar 文件放在lib 目录中。

如果可能,我确实建议使用maven directory structure,但是 我猜你有一个旧项目,不能改变结构。

<project name="JUnitTest" default="test" basedir=".">
    <property name="srcdir" location="java" />
    <property name="testdir" location="test" />
    <property name="classdir" location="build" />
    <property name="resultdir" location="junit-results" />
    <property name="full-compile" value="true" />

    <path id="classpath.test">
        <pathelement location="$classdir" />
        <pathelement location="lib/junit-4.4.jar" />
    </path>

    <target name="compile">
        <javac srcdir="$srcdir" destdir="$classdir">
        </javac>
    </target>

    <target name="compileTests" depends="compile">
        <javac srcdir="$testdir" destdir="$classdir">
            <classpath refid="classpath.test" />
        </javac>
    </target>

    <target name="test" depends="compileTests">
        <junit haltonfailure="no">
            <classpath refid="classpath.test" />
            <formatter type="xml" />
            <test name="MyUnitTest" todir="$resultdir" />
        </junit>
    </target>
</project>

【讨论】:

以上是关于Junit ant 任务未将断言错误报告为失败的主要内容,如果未能解决你的问题,请参考以下文章

Ant、Ivy 和 JUnit 找不到类 - build.xml 中的错误?

IntelliJ:Ant报告一个错误。没有迹象表明失败的地点或原因

Junit 测试断言错误预期为 3,但附带 0

JUnit断言失败[重复]

从 ant 执行的 junit 测试未加载 DLL

eclipse中的ant junit构建错误