[英]Why do `assert_eq` and `assert_ne` exist when a simple `assert` will suffice?
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
並且繼續執行。 通常還有一些特定類型的斷言,如字符串或數組。 重點是什么?
線程'主'驚慌於'斷言失敗:1 == 2',
您的示例太簡單了,無法看到assert_eq!
的使用有很大的優勢assert_eq!
。 考慮以下代碼:
let s = "Hello".to_string();
assert!(&s == "Bye");
這是由此產生的恐慌消息:
'assertion failed: &s == "Bye"'
現在讓我們看看當我們使用assert_eq!
時會發生什么assert_eq!
:
let s = "Hello".to_string();
assert_eq!(&s, "Bye");
消息:
'assertion failed: `(left == right)` (left: `"Hello"`, right: `"Bye"`)'
此消息提供了比前者更多的洞察力。 其他單元測試系統通常也這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.