簡體   English   中英

當一個簡單的`assert`足夠時,為什么`assert_eq`和`assert_ne`存在?

[英]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; 我一直在單元測試框架中看到這些不同的斷言宏或函數:

  • Cpputest有CHECKCHECK_FALSE以及CHECK_EQUAL等等;
  • Googletest有EXPECT_GTEXPECT_EQ等等;
  • JUnit有assertEqualsassertFalse並且繼續執行。

通常還有一些特定類型的斷言,如字符串或數組。 重點是什么?

線程'主'驚慌於'斷言失敗: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM