我正在使用單元測試框架來測試我的庫。我在庫中有很多斷言來確保程序員錯誤在調試版本中被捕獲。現在我想確保我正在測試所有可能的程序員錯誤。如何測試斷言?
例如在Table類中,我想確保行和列的通行數不會大於表所具有的行和列。假設我忘記測試cols。我想讓我的單元測試在斷言應該觸發的地方執行一個測試,如果沒有,則測試失敗。那可能嗎?
我正在使用單元測試框架來測試我的庫。我在庫中有很多斷言來確保程序員錯誤在調試版本中被捕獲。現在我想確保我正在測試所有可能的程序員錯誤。如何測試斷言?
例如在Table類中,我想確保行和列的通行數不會大於表所具有的行和列。假設我忘記測試cols。我想讓我的單元測試在斷言應該觸發的地方執行一個測試,如果沒有,則測試失敗。那可能嗎?
接下來的問題是你計劃重構你的代碼,這樣如果出現這種情況,你會拋出一個異常,而不是依靠<cassert>
的功能來解決你的問題?如果是這樣,你可以檢查是否拋出異常。如果不是,那麼測試來自<cassert>
的聲明語句將更加困難。像CUTE這樣的單元測試框架只有一個ASSERT_THROWS
宏用於異常測試。我會檢查你的框架。
此外,我工作的店鋪的情況也是如此,他們對assert皺眉,並且更喜歡例外。撥打abort
不利於自動測試。其實,它禁止它。只是我的兩分錢。
我正在編譯沒有例外,所以我只能使用斷言。我會考慮將單元測試項目的assert宏轉換爲斷言 – Samaursa 2011-06-12 23:59:30
答案取決於您正在使用的特定測試框架,並且很可能在Google中很少有搜索時找到答案。
第一主打爲「提高單元測試的測試斷言」指向這個問題在StackOverflow的:Testing for assert in the Boost Test framework
第二主打的「CppUnit的測試斷言」指向此文檔頁面: Making Assertions
嘗試在搜索互聯網爲您的具體框架。
我試圖依靠SO的搜索,但我想這是一個壞主意(很多時候也會輸入不正確的搜索詞) – Samaursa 2011-06-12 23:58:59
有三種可能的方式:
轉換斷言異常,或
運行的每個測試單獨的程序,其退出你的代碼(或更確切地說,測試框架)檢查,或
讓一個斷言觸發,寫出關於它自己的信息,然後測試框架可以拿起它。
據我所知沒有商業或廣泛使用的單元測試框架支持最後兩種方式。我已經使用過程退出代碼來檢查業餘愛好編程,但是隻有在Python和C++中實現的小型個人單元測試框架(「愛好編程」:這意味着我沒有關於它如何擴展到大規模編程的良好數據)。進程退出代碼測試的主要情況是代碼具有靜態斷言,您希望在確定時觸發它們。
總結,與現有的測試框架,轉換爲異常AFAIK您唯一的選擇。
乾杯& hth。
謝謝,將它們轉換爲例外是我會做的(+1) – Samaursa 2011-06-13 00:02:00
你應該指定你正在使用的*單元測試框架*,因爲答案依賴於它。 – 2011-06-12 23:40:14
很酷,-1沒有解釋:) @David:我正在使用CATCH測試框架。我會和wheaties一起提出建議,並將這些斷言轉換爲針對單元測試庫的例外情況,並且不進行任何測試。 – Samaursa 2011-06-12 23:59:47