雖然ASSERT_ *宏導致測試用例終止,但EXPECT_ *宏仍繼續進行評估。 我想知道哪個是決定是否使用其中一個的標準。在GoogleTest中使用ASSERT和EXPECT
30
A
回答
33
使用ASSERT
當測試通過時很關鍵。 (例如,如果它沒有通過,那麼程序的其餘部分將不起作用。)當它是一個可以承受失敗的測試(並且允許您運行程序時)使用EXPECT
。
規則的拇指是:使用EXPECT
,除非你需要某些東西來完成整個測試,在這種情況下,你應該使用ASSERT
,因爲繼續是沒有意義的。
這在primer內迴盪:
一般
EXPECT_*
是優選的,因爲它們允許在測試中報告多於一個的故障。但是,如果在有問題的斷言失敗時無法繼續,則應該使用ASSERT_*
。
14
使用EXPECT_
當你
- 希望在您的測試報告不止一個故障
使用ASSERT_
時
- 它沒有任何意義,繼續當斷言失敗
由於ASSERT_
如果失敗會立即中止您的功能,可能的清理代碼會被跳過。 首選EXPECT_
作爲您的默認值。
4
檢查以下鏈接:Effective C++ Testing Using GoogleTest (幻燈片23)。對於使用EXPECT vs ASSERT有很好的指導意見/建議。
0
除了以前的答案...
ASSERT_
不會終止測試用例的執行。它從任何使用的函數返回。除了失敗測試用例,它的計算結果爲return;
,這意味着它不能用於返回除void
以外的函數。除非你對編譯器警告沒有問題,那就是。
EXPECT_
失敗的測試用例但不return;
,所以它可以在任何返回類型的函數內部使用。
相關問題
- 1. 在expect中同時使用expect()和interact()
- 2. 如何在python中使用assert和==?
- 3. 在消息中使用assert()
- 4. 使用#!/ usr/bin/expect和bash
- 5. 在eclipse中使用googletest:怎麼樣?
- 6. 使用Assert Java
- 7. googletest和VS2010:無法使用EXPECT_EQ
- 8. 使用Expect
- 9. 在豬中使用ASSERT時出錯
- 10. 何時在PHP中使用native assert
- 11. 在「assert」中使用switch語句(C++)
- 12. 在munit mule中使用assert-payload選項
- 13. 如何在c DLL中使用assert
- 14. 在正常代碼中使用assert
- 15. 在Python中使用assert的例子?
- 16. 如何在Python中正確使用(assert)?
- 17. 在C++中使用「assert」指針
- 18. Prolog - ASSERT和RETRACT
- 19. 在'expect'中使用條件語句
- 20. 在bash腳本中使用expect期望
- 21. 在Bash腳本中使用Expect函數
- 22. Jasmine:在循環中使用expect期望
- 23. 如何在lambda Expect中使用Rhino.Mocks.RhinoMocksExtensions.VoidType?
- 24. 在Python中使用expect的用戶名和密碼
- 25. 使用expect腳本
- 26. 使用Net :: SSH :: Expect
- 27. 捕習俗在GoogleTest使用__debugbreak
- 28. 爲什麼我們在php中使用assert()和assert_options()?
- 29. 如何使用expect和git clone?
- 30. Mixing Expect和BASH
標準示例:在檢查容器的內容之前,先檢查容器的大小,因爲檢查對可能不存在的項目的期望是沒有意義的(此外,如果嘗試獲取第n個元素,測試很可能會崩潰空容器)。 – chalup 2010-04-02 07:00:21
這與你是否希望_program_運行無關,而是關於你是否希望_test suite_繼續運行。預期失敗應該表示您正在測試的代碼有缺陷。一個ASSERT失敗應該意味着測試套件本身是有缺陷的,或者說你正在測試的代碼是如此混亂以至於沒有必要繼續嘗試測試它。 – 2017-12-06 16:45:43