今天,我看到了一个使用java断言而不是JUnit断言的JUnit测试用例--选择其中一个有明显的优点或缺点吗?
发布于 2010-06-03 21:38:44
在JUnit4中,JUnit断言抛出的异常(实际上是错误)与java assert
关键字(AssertionError)抛出的错误相同,因此它与assertTrue
完全相同,除了堆栈跟踪之外,您无法区分它们。
也就是说,断言必须在JVM中使用一个特殊的标志来运行,这会导致许多测试看起来像是通过了,因为在运行JUnit测试时,有人忘记了用这个标志配置系统--这是不好的。
通常,由于这个原因,我认为使用JUnit assertTrue
是更好的实践,因为它保证了测试的运行,确保了一致性(您有时会使用assertThat
或其他非java关键字的断言),并且如果JUnit断言的行为在将来应该发生变化(例如连接到某种过滤器或其他未来的JUnit特性中),您的代码将能够利用这一点。
java中assert关键字的真正目的是能够在不影响运行时的情况下将其关闭。这不适用于单元测试。
发布于 2010-06-03 21:29:57
我更喜欢JUnit断言,因为它们提供了比内置assert
语句更丰富的API,而且更重要的是,不需要像assert
那样显式启用,后者需要-ea
JVM参数。
发布于 2011-06-07 22:57:11
当测试失败时,你会得到更多的信息。
java.lang.AssertionError: expected:<1> but was:<2>
中的assertEquals(1, 2);
结果
vs
java.lang.AssertionError
中的assert(1 == 2);
结果
如果将消息参数添加到assertEquals
,则可以获得更多信息
https://stackoverflow.com/questions/2966347
复制相似问题