assert!(a == b)
比 assert_eq!(a, b)
更加简洁,并且在我的看法中更易读。
错误信息基本相同:
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
实际上,这个问题不仅仅涉及到Rust;我经常在单元测试框架中看到这些不同的断言宏或函数:
- Cpputest有
CHECK
、CHECK_FALSE
、CHECK_EQUAL
等等; - Googletest有
EXPECT_GT
、EXPECT_EQ
等等; - JUnit有
assertEquals
、assertFalse
等等。
通常还会针对某些特定类型(比如字符串或数组)进行断言。这是什么意思呢?
assert_eq(<expr>, <expr>)
?难道不可能通过模式匹配assert!(<expr> == <expr>)
并且只做正确的事情™ 吗? - Lukas Kalbertodtassert_eq!
,我们就不需要这样的复杂性。 :P - E net4==
和!=
生成等效的输出,那么为已经存在于语言中的语法创建新的DSL似乎是不太理想的。有时我们还需要使用>
,<
,>=
,<=
,但这些在assert_*宏DSL中似乎不存在。令人困惑。 - U007D