断言与JUnit断言

Rob*_*ert 75 java junit assert assertions

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

Yis*_*hai 90

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

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

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

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


Ada*_*ski 26

我更喜欢JUnit断言,因为它们提供比内置assert语句更丰富的API ,更重要的是不需要显式启用assert,这需要-eaJVM参数.


小智 18

当测试失败时,您会获得更多信息.

assertEquals(1, 2); 结果是 java.lang.AssertionError: expected:<1> but was:<2>

VS

assert(1 == 2); 结果是 java.lang.AssertionError

如果添加消息参数,您可以获得更多信息 assertEquals

  • 试试`断言1 == 2:"1不是2";`. (6认同)

小智 7

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