今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点?
最佳答案
在JUnit4中,JUnit断言引发的异常(实际上是Error)与java assert
关键字(AssertionError)引发的错误相同,因此它与assertTrue
完全相同,除了堆栈跟踪之外,您无法分辨出区别。
话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,仅仅是因为有人在运行JUnit测试时忘记使用该标志配置系统-不好。
通常,因此,我认为使用JUnit的assertTrue
是更好的做法,因为它可以确保测试运行,确保一致性(有时使用assertThat
或其他不是Java关键字的断言),并且JUnit断言将来应该更改(例如,挂钩到某种过滤器或其他将来的JUnit功能),您的代码将能够利用它。
Java中assert关键字的真正目的是能够将其关闭而不会影响运行时。这不适用于单元测试。