断言与 JUnit 断言

2022-08-31 10:56:59

今天,我看到一个带有java断言而不是JUnit断言的JUnit测试用例 - 首选一个断言是否有显着的优点或缺点?


答案 1

在 JUnit4 中,JUnit 断言引发的异常(实际上是 Error)与 java 关键字 (AssertionError) 引发的错误相同,因此它与堆栈跟踪完全相同,但您无法区分。assertassertTrue

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

一般来说,正因为如此,我认为使用JUnit是更好的做法,因为它保证了测试的运行,确保了一致性(你有时会使用或其他不是java关键字的断言),并且如果JUnit断言的行为将来应该改变(例如挂接到某种过滤器或其他未来的JUnit功能),你的代码将能够利用它。assertTrueassertThat

java中assert关键字的真正目的是能够关闭它而不会造成运行时损失。这不适用于单元测试。


答案 2

我更喜欢JUnit断言,因为它们提供了比内置语句更丰富的API,更重要的是,不需要显式启用,这与需要JVM参数不同。assertassert-ea


推荐