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;我一直在单元测试框架中看到这些不同的断言宏或函数:
CHECK
和CHECK_FALSE
以及CHECK_EQUAL
等等; EXPECT_GT
和EXPECT_EQ
等等; assertEquals
和assertFalse
并且可以继续。通常还有一些特定类型的断言,如字符串或数组。有什么意义?
答案 0 :(得分:9)
线程'主'惊慌失措'断言失败:1 == 2',
您的示例太简单了,无法看到使用assert_eq!
有很大的优势。请考虑以下代码:
let s = "Hello".to_string();
assert!(&s == "Bye");
这是由此产生的恐慌信息:
'assertion failed: &s == "Bye"'
现在让我们看看当我们使用assert_eq!
时会发生什么:
let s = "Hello".to_string();
assert_eq!(&s, "Bye");
消息:
'assertion failed: `(left == right)` (left: `"Hello"`, right: `"Bye"`)'
此消息提供了比前者更多的洞察力。其他单元测试系统也经常这样做。