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

JUnit 4@Test注释将测试名称报告为“未知”

何博涛
2023-03-14

使用JUnit 4,调用JUnit的ant构建脚本总是将测试类名报告为“未知”。有没有一种不涉及从测试用例派生的方法来解决这个问题?

我用@测试注释声明我的测试方法,例如:

有些est.java:

public class SomeTest {
    @Test
    public void doSomething() { .. }
}

并将它们收集到一个测试套件中:

所有测试。java:

@RunWith(Suite.class)
@Suite.SuiteClasses( {
    SomeTest.class
})
public class AllTests {
}

然后我通过NetBeans调用ant任务,它对JUnit运行的打印结果有很好的集成支持。除了测试名称之外,一切似乎都找到了,例如:

6 tests passed, 2 tests failed, 2 tests caused an error (8.4s)
com.mystuff.AllTests FAILED
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown FAILED (0.0s)
    Unknown caused an ERROR: at org.hibernate.somethingorother.java:1234 (0.0s)
    ..etc..

测试运行正常,我通常可以从记录的堆栈跟踪中找出故障点,但是所有被报告为“未知”的东西都很烦人和迟钝。

阅读了一些SO帖子后,我发现有两种方法可以设置测试,一种是从TestCase派生的老JUnit 3方法,另一种是使用@Test注释的新JUnit 4方法。

当我的测试在Eclipse中扩展TestCase(Junit)时,无法使用@Test annotation执行测试

JUnit混淆:使用“扩展测试用例”或“@测试”?

这篇文章提到“在JUnit4中,测试类不再扩展公共框架类。因此,不再有继承的方法getName”。如何在运行时获得JUnit4中的测试用例名?

我尝试从TestCase扩展我的测试用例,这确实使名称正确报告,但是这个单一的更改搞砸了它的一些生命周期,并且测试以奇怪的方式失败。我的理解是,当JUnit运行程序看到您的测试类派生自TestCase时,它会将其作为JUnit 3测试用例运行,因此会忽略我所有的@之前、@之后等注释。我看不出回到JUnit 3测试机制有什么意义。

共有1个答案

罗昊空
2023-03-14

这很尴尬,但值得一提。我想我只是回答了我自己的问题。

答案似乎是任务属性之一,即enableTestListenerEvents,如下所述:http://ant.apache.org/manual/Tasks/junit.html

我忽略了它,因为文档中说“由于Ant 1.8.2-Ant 1.7.0到1.8.1的行为就像默认情况下该属性为true一样”我正在运行1.8.2,但我误读了它,它实际上是说在1.8.2中默认为关闭。

所以解决方法是在build.xml中改变我的任务:

<junit haltonfailure="true" printsummary="on" fork="yes" dir=".">

<junit haltonfailure="true" printsummary="on" fork="yes" dir="."
    enableTestListenerEvents="true">

随着测试的进行,NetBeans现在会在测试结果窗格中打印最新信息,包括测试名称。整个反馈体验要丰富得多。告诉你的朋友:)

 类似资料:
  • 当运行单元测试的时候,Gradle会输出一份HTML格式的报告以方便查看结果。 Android plugin也是基于此,并且扩展了HTML报告文件,它将所有连接设备的报告都合并到一个文件里面。

  • 我用Selenium创建了测试框架,并为测试报告设置了ExtentReports。对字段使用页面对象模型和@FindBy注释为每个页面创建自己的WebElements存储。现在我想创建自定义注释@Name 以及它的实现,以便能够在我的报告后面使用每个WebElement的描述。我有我自己的实现点击()方法 我能够得到所有元素的描述注释类与反射像这里 是否可以在java中读取注释的值? 但无法获取我

  • 在我的pom.xml我创建了不同的配置文件烟雾和回归测试使用cucumber框架。使用下面的maven命令运行测试。以下是烟雾测试的例子: 测试运行正常,但即使我提供了,它也不会生成报告。我为cucumber使用了一个常见的运行类,所以我不能将文件名作为注释。 以下是pom.xml配置:

  • 我有以下班级档案 当我单独运行这个类时(作为- 控制台输出:[远程测试NG] 检测到测试NG版本 7.0.1 在端口 42250 上启动 Chrome 驱动程序 83.0.4103.39 (ccbf011cb2d2b19b506d833300373761342c20cd-refs/分支头/4103@{#416}) 仅允许本地连接。请参阅 https://chromedriver.chromium.

  • 22.13.7.测试报告 测试任务默认生成以下结果. 一份HTML测试报告 一个与Ant的JUnit测试报告任务兼容的XML.这个格式与许多其他服务兼容,如CI serves 结果是有效的二进制,测试任务会从这些二进制结果生成其他结果。 有一个独立的TestReport任务类型会根据一些Test任务实例生成的二进制源码生成一个HTML报告.使用这种测试类型,需要定义一个destinationDir

  • 当运行单元测试的时候,Gradle 会输出一份 HTML 格式的报告以方便查看结果。Android plugin 则将所有连接设备的测试报告都合并到一个 HTML 格式的报告文件中。所有测试结果都以 XML 文件形式保存到 build/reports/androidTests/ 中(类似于 JUnit 的运行结果保存在 build/reports/tests 中)。可以自定义路径: android