断言与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断言的主要内容,如果未能解决你的问题,请参考以下文章