断言与JUnit断言

时间:2010-06-03 13:26:46

标签: java junit assert assertions

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

6 个答案:

答案 0 :(得分:85)

在JUnit4中,JUnit断言抛出的异常(实际上是Error)与java assert关键字(AssertionError)抛出的错误相同,因此它与assertTrue和其他的完全相同比堆栈跟踪你无法区分。

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

一般来说,因为这个,我认为使用JUnit assertTrue是更好的做法,因为它保证测试运行,确保一致性(你有时使用assertThat或其他断言如果JUnit断言的行为在将来发生变化(例如挂钩到某种过滤器或其他未来的JUnit功能),那么你的代码将能够利用它。

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

答案 1 :(得分:25)

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

答案 2 :(得分:14)

如果测试失败,您将获得更多信息。

assertEquals(1, 2);会产生java.lang.AssertionError: expected:<1> but was:<2>

VS

assert(1 == 2);会产生java.lang.AssertionError

如果将消息参数添加到assertEquals

,则可以获得更多信息

答案 3 :(得分:6)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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