2010-04-02 45 views

回答

33

使用ASSERT當測試通過時很關鍵。 (例如,如果它沒有通過,那麼程序的其餘部分將不起作用。)當它是一個可以承受失敗的測試(並且允許您運行程序時)使用EXPECT

規則的拇指是:使用EXPECT,除非你需要某些東西來完成整個測試,在這種情況下,你應該使用ASSERT,因爲繼續是沒有意義的。


這在primer內迴盪:

一般EXPECT_*是優選的,因爲它們允許在測試中報告多於一個的故障。但是,如果在有問題的斷言失敗時無法繼續,則應該使用ASSERT_*

+7

標準示例:在檢查容器的內容之前,先檢查容器的大小,因爲檢查對可能不存在的項目的期望是沒有意義的(此外,如果嘗試獲取第n個元素,測試很可能會崩潰空容器)。 – chalup 2010-04-02 07:00:21

+1

這與你是否希望_program_運行無關,而是關於你是否希望_test suite_繼續運行。預期失敗應該表示您正在測試的代碼有缺陷。一個ASSERT失敗應該意味着測試套件本身是有缺陷的,或者說你正在測試的代碼是如此混亂以至於沒有必要繼續嘗試測試它。 – 2017-12-06 16:45:43

14

使用EXPECT_當你

  • 希望在您的測試報告不止一個故障

使用ASSERT_

  • 它沒有任何意義,繼續當斷言失敗

由於ASSERT_如果失敗會立即中止您的功能,可能的清理代碼會被跳過。 首選EXPECT_作爲您的默認值。

0

除了以前的答案...

ASSERT_不會終止測試用例的執行。它從任何使用的函數返回。除了失敗測試用例,它的計算結果爲return;,這意味着它不能用於返回除void以外的函數。除非你對編譯器警告沒有問題,那就是。

EXPECT_失敗的測試用例但不return;,所以它可以在任何返回類型的函數內部使用。