今天我看到一个JUnit测试用例中使用了Java断言而不是JUnit断言 - 优先选择其中一种是否有重大优势或劣势?
今天我看到一个JUnit测试用例中使用了Java断言而不是JUnit断言,想知道是否有明显的优缺点。今天我看到一个JUnit测试用例中使用了Java断言而不是JUnit断言 - 优先选择其中一种是否有重大优势或劣势?
今天我看到一个JUnit测试用例中使用了Java断言而不是JUnit断言,想知道是否有明显的优缺点。assert
关键字引发的错误(AssertionError)相同,因此与assertTrue
完全相同,除了堆栈跟踪之外,您无法区分它们。assertTrue
是更好的实践,因为它保证测试被运行,确保一致性(有时会使用 assertThat
或其他不是java关键字的断言),如果JUnit断言的行为在将来发生改变(例如连接到某种过滤器或其他未来的JUnit功能),您的代码将能够利用它。我更喜欢使用JUnit断言,因为它们提供了比内置的assert
语句更丰富的API,并且更重要的是不需要显式启用,而assert
则需要-ea
JVM参数。
当测试失败时,您会获得更多信息。
assertEquals(1, 2);
的结果是 java.lang.AssertionError: expected:<1> but was:<2>
相比之下,
assert(1 == 2);
的结果是 java.lang.AssertionError
如果您向 assertEquals
添加消息参数,您可以获得更多信息。
assert 1==2: "1不等于2";
。 - Grimassert
可能更可取--对于会影响性能并且最好默认禁用的正确性检查。然而,我的经验是大多数断言应该始终开启。 - Thomas W我建议在测试用例中使用JUnit断言,而在代码中使用Java的assert。换句话说,真正的代码不应该依赖于JUnit,这是显而易见的,如果是测试代码,则应使用JUnit的变体,而不是assert。
Assert
,JUnit需要编写更多样板代码。如果没有JUnit,使用assert
将需要您编写整个框架。 - Yishai如果您仅使用新的、闪亮的东西,那么这可能并不适用,但是assert在Java 1.4SE之前并不存在。因此,如果您必须在旧技术环境下工作,出于兼容性考虑,您可以倾向于使用JUnit。