是否有人知道CppUnit的擴展,可用於根據有關內存泄漏的測試基礎進行測試斷言。使用CppUnit進行內存泄漏檢測
即CPPUNIT_ASSERT_NO_LEAKS()?
本質上,我希望能夠在泄漏內存中執行測試結果時失敗特定測試。
是否有人知道CppUnit的擴展,可用於根據有關內存泄漏的測試基礎進行測試斷言。使用CppUnit進行內存泄漏檢測
即CPPUNIT_ASSERT_NO_LEAKS()?
本質上,我希望能夠在泄漏內存中執行測試結果時失敗特定測試。
不知道這一點,但你可以使用類似Fluid Studios的內存管理器代碼,並在你自己的鉤一些調整。或者將其編譯到您的測試應用程序中,然後爲每個測試運行一次應用程序並整理內存跟蹤結果。
如果您在Linux上運行,則可以使用memcheck運行測試。
手冊的Client Requests節描述了幾種有用的宏,其中一個是標註爲用於測試:
VALGRIND_COUNT_LEAKS
:填充所述四個參數與先前發現的存儲器字節數泄漏檢查泄漏,可疑,可及和壓制。再次,在調用VALGRIND_DO_LEAK_CHECK
之後,在測試用具代碼中很有用。
宏在memcheck.h
定義(在/usr/include/valgrind
可能),以及你想要的順序將類似於
unsigned long base_definite, base_dubious, base_reachable, base_suppressed;
VALGRIND_DO_LEAK_CHECK;
VALGRIND_COUNT_LEAKS(base_definite, base_dubious, base_reachable, base_suppressed);
// maybe assert that they're zero!
// call test
unsigned long leaked, dubious, reachable, suppressed;
VALGRIND_DO_LEAK_CHECK;
VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed);
CPPUNIT_ASSERT_EQUAL(base_leaked, leaked);
// etc.
重複,對於每一個測試將是一個痛苦,所以你可以寫你自己的宏或者更好的是專門的TestRunner。
默認情況下,CPPUNIT沒有內存泄漏檢查支持。
該項目現在已經重新開始(已停止很長一段時間),這可能是CPPUNIT2的一項功能,您可以向作者提出建議(或寫入)。
如果您正在尋找具有內存泄漏檢測支持的單元測試框架,您可以嘗試查看CppUTest。這是Martin Fowler和Bob Martin在某些TDD課程中使用的項目。這很不錯。
CppUTest是我之前沒見過的東西......謝謝!看起來這裏有一些基本的內存測試支持。現在查看CppUnit 2文檔... – 2009-06-16 14:26:56
用valgrind運行你的單元測試。我使用的單元測試框架允許您運行一個或多個單獨的單元測試,以便您可以檢測哪個單元導致泄漏。
在Windows這將是一個非常簡單的使用,以調試堆一些調用的事讓CppUnit的使用_CrtMemCheckpoint()
和_CrtMemDifference()
此信息行事:
有缺點:
我知道它不是CppUnit,但boost :: test可以做內存泄漏檢測。
從http://www.boost.org/doc/libs/1_39_0/libs/test/doc/html/execution-monitor/user-guide.html:
void detect_memory_leaks(bool on_off);
void break_memory_alloc(long mem_alloc_order_num);
我在哪裏工作,我們建立我們的單元測試與淨化。然後,我們的持續集成平臺既提取成功/失敗的測試用例數量,也提取泄漏字節數(+ lint和覆蓋率結果),並將其顯示在網頁上。我強烈建議這樣做。
對不起,不提供你想要的解決方案。
我知道回答這個問題有點太晚了。但這是微軟的一個很棒的工具。我現在是一個Linux用戶,但我已經使用這個,當我在寫代碼的窗口(Visual C++和QT) http://www.microsoft.com/en-us/download/details.aspx?id=20028
這不會失敗基於內存泄漏特定的測試... – 2009-06-16 13:46:59
謝謝,我本來應該清晰。修! – 2009-06-16 15:57:10