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

有没有办法在JUnit中跟踪多个断言测试用例的每个断言?[复制]

穆俊名
2023-03-14

我对TDD和JUnit有些陌生,我知道我可以为我在代码中实现的方法编写测试用例。

显然,我的代码中有一些方法需要测试几个角落案例来验证方法实现是否正常。由于通常良好的做法是在代码中保持每个方法一个测试方法,因此我必须为这种方法添加多个断言,如本答案所述。https://stackoverflow.com/a/762582/5715934

public void testValueOf() {
    assertEquals(1, Integer.valueOf("1").intValue());
    assertEquals(0, Integer.valueOf("0").intValue());
    assertEquals(-1, Integer.valueOf("-1").intValue());
    assertEquals(Integer.MAX_VALUE, Integer.valueOf("2147483647").intValue());
    assertEquals(Integer.MIN_VALUE, Integer.valueOf("-2147483648").intValue());
....
}

但是,当我执行测试用例时,我没有获得测试方法中每个断言的测试状态(通过/失败)。相反,即使一个断言失败,它也会显示“红色”,如果所有断言都通过,它会显示绿色。

跟踪每个断言是否更容易使调试更容易?是否有任何正式的方法/工具/解决方法可以做到这一点(JUnit 4)?

共有1个答案

凌照
2023-03-14

首先,对单一方法使用单一测试方法不是一个好主意,相反。在上面的代码中,每个断言实际上都应该是一个单独的测试方法。这并不意味着您在测试方法中总是有一个断言,这只适用于最简单的断言。如果一个方法(例如)返回一个对象,您将有更多的断言来验证该对象是否良好。

但最重要的是,测试中的方法通常只调用一次。

了解哪个断言失败的唯一方法是查看消息/堆栈跟踪。但一般来说,如果测试失败,您就会知道有什么地方出错,您可以打开IDE查看测试。

 类似资料:
  • 问题内容: 我需要创建一个伪的帮助程序类以用于单元测试(注入到测试的类中)。有没有办法在此类中使用TestCase断言? 我想将这些断言用于Fake类执行的一些常见检查。就像是: 问题答案: 您可以创建的实例并在其上调用方法。 在较旧的Python版本(Python 2.7和更早的版本3.0、3.1)上,您需要在类类中传递 现有 方法的名称(通常在子类上传递测试方法的名称)。在这种情况下将: 但是

  • 我以前写过一个测试,它成功了,但现在我得到了一个断言错误:JSON路径没有值。

  • 问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,

  • 在我的测试用例中,我得到一个整数值: 然后,我想检查是否等于3或等于5,这两种情况都可以。所以,我做到了: 我运行了我的测试,日志显示是5,但是我上面的断言代码由于断言失败错误而失败。似乎我不能使用

  • JUnit 5中是否有任何机制可以在测试中运行所有assert,即使中间的assert失败?例如: 我的意图是运行所有断言,并跟踪失败的只是第二个,而不是第三个和第一个。

  • 我对SonarQube有问题,我的几个单元测试都有问题,引发了以下问题: 为此测试用例添加至少一个断言。 每个测试用例都类似于此格式(其中许多断言被委托给具有公共断言的方法,以避免重复): 现在,很明显,我可以从私有方法中提取这三个断言,并将它们放在测试方法中,但我正在多次执行相同的检查(在不同的字段上)。 所以,我想我会尝试通过(重新)抛出来模拟断言方法的行为: 不幸的是,这种方法也不起作用。