繁体   English   中英

断言与JUnit断言

[英]assert vs. JUnit Assertions

今天我看到了一个带有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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM