簡體   English   中英

如何測試斷言?

[英]How to test assertions?

我正在使用單元測試框架來測試我的庫。 我在庫中有很多斷言,以確保在調試版本中捕獲程序員錯誤。 現在我想確保我正在測試所有可能的程序員錯誤。

例如,在表 class 中,我想確保行和列傳遞不大於表具有的行和列。 假設我忘記測試 cols。 我想讓我的單元測試在斷言應該觸發的地方執行測試,如果沒有,則測試失敗。 那可能嗎?

那么問題就變成了您是否計划重構您的代碼,以便如果發生這種情況,您將拋出異常而不是依賴<cassert>功能來提示您解決問題? 如果是這樣,您只需檢查是否引發了異常。 如果不是,那么從<cassert>測試斷言語句將更加困難。 像 CUTE 這樣的單元測試框架有一個ASSERT_THROWS宏,僅用於異常測試。 我會檢查你的框架。

此外,我工作過的商店就是這種情況,他們不贊成斷言,更喜歡例外。 調用abort無助於自動化測試。 實際上,它禁止它。 只是我的兩分錢。

有三種可能的方式:

  • 將斷言轉換為異常,或

  • 運行每個測試一個單獨的程序,您(或者更確切地說,測試框架)檢查其退出代碼,或者

  • 讓一個觸發的斷言寫入有關自身的信息,然后測試框架可以獲取這些信息。

據我所知,沒有商業或廣泛使用的單元測試框架支持最后兩種方式。 我已經使用檢查進程退出代碼來進行愛好編程,但僅使用在 Python 和 C++ 中實現的小型個人單元測試框架(“愛好編程”:這意味着我沒有關於它如何擴展到大規模編程的良好數據)。 進程退出代碼測試的主要情況是代碼具有 static 斷言,您希望確保它們在預期時被觸發。

總而言之,使用現有的測試框架,轉換為異常是 AFAIK 您唯一的選擇。

干杯&hth。

答案取決於您使用的特定測試框架,並且很可能在 google 中很少搜索就可以找到。

“boost unittest test assert”的第一次點擊指向StackOverflow中的這個問題: Testing for assert in the Boost Test framework

“cppunit test assert”的第二次點擊指向此文檔頁面: Making Assertions

嘗試在互聯網上搜索您的具體框架。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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