断言与JUnit断言

问题描述 投票:69回答:6

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

java junit assert assertions
6个回答
85
投票

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

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

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

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


25
投票

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


14
投票

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

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

VS

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

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


6
投票

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


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.