4
assert!(a == b)
比assert_eq!(a, b)
占用更少的字符,在我看来,它更具可读性。为什么`assert_eq`和`assert_ne`存在一个简单的`assert`就足够了?
错误消息是或多或少是相同的:
thread 'main' panicked at 'assertion failed: `(left == right)` (left: `1`, right: `2`)', src\main.rs:41
或
thread 'main' panicked at 'assertion failed: 1 == 2', src\main.rs:41
实际上,这个问题不仅是锈病;我总是看到在单元测试框架这些不同的断言宏或功能:
- Cpputest有
CHECK
和CHECK_FALSE
和CHECK_EQUAL
等; - Googletest有
EXPECT_GT
和EXPECT_EQ
等等; - JUnit有
assertEquals
和assertFalse
,并继续。
通常还有一些特定类型的字符串或数组声明。重点是什么?
对。你的测试框架应该可以帮助你。简单地说“一个测试失败”比说“由于这些原因测试失败*”没有多大帮助。还有我们为什么要首先创建名称的函数的全部方面 - 具有可读性和可理解的代码。 – Shepmaster
@Shepmaster我不确定assert_eq本身更具可读性,但更多的信息性错误信息当然更好。 – Amomum
@Amomum:实际上有一个改进assert_eq的RFC,同时你可能对[pretty_assertions](https://crates.io/crates/pretty_assertions)箱子感兴趣。 –