断言与JUnit断言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了断言与JUnit断言相关的知识,希望对你有一定的参考价值。

今天我看到了一个带有java断言而不是JUnit断言的JUnit测试用例 - 是否有优势或缺点优先于另一个?

答案

在JUnit4中,JUnit断言抛出的异常(实际上是Error)与java assert关键字(AssertionError)抛出的异常相同,所以它与assertTrue完全相同,除了堆栈跟踪之外你无法区分它们。

话虽如此,断言必须在JVM中使用特殊标志运行,导致许多测试似乎只是因为有人在JUnit测试运行时忘记使用该标志配置系统 - 不好。

一般来说,因为这个,我认为使用JUnit assertTrue是更好的做法,因为它保证测试运行,确保一致性(你有时使用assertThat或其他不是java关键字的断言)以及如果JUnit断言将来应该更改(例如挂钩到某种过滤器或其他未来的JUnit功能),您的代码将能够利用它。

java中assert关键字的真正目的是能够在没有运行时惩罚的情况下关闭它。这不适用于单元测试。

另一答案

我更喜欢JUnit断言,因为它们提供了比内置的assert语句更丰富的API,更重要的是不需要像assert那样明确启用,这需要-ea JVM参数。

另一答案

当测试失败时,您将获得更多信息。

assertEquals(1, 2);导致java.lang.AssertionError: expected:<1> but was:<2>

VS

assert(1 == 2);导致java.lang.AssertionError

如果将消息参数添加到assertEquals,您可以获得更多信息

另一答案

我会说在测试用例中使用JUnit断言,并在代码中使用java的断言。换句话说,真正的代码永远不会有JUnit依赖,很明显,如果它是一个测试,它应该使用它的JUnit变体,而不是断言。

另一答案

我会说如果你使用的是JUnit,你应该使用JUnit断言。 assertTrue()assert基本相同,否则为什么甚至使用JUnit?

另一答案

如果您专门使用闪亮和新的东西,这可能不适用,但断言直到1.4SE才引入Java。因此,如果您必须在具有较旧技术的环境中工作,则出于兼容性原因,您可能倾向于使用JUnit。

以上是关于断言与JUnit断言的主要内容,如果未能解决你的问题,请参考以下文章

JUnit5 中的 assertAll 与多个断言

junit测试assert各种断言用法

Junit——Assert断言

postman添加断言

10.Android UiAutomator Junit 断言函数的使用

Junit4 断言新方法