2009-06-16 27 views
5

是否有人知道CppUnit的擴展,可用於根據有關內存泄漏的測試基礎進行測試斷言。使用CppUnit進行內存泄漏檢測

即CPPUNIT_ASSERT_NO_LEAKS()?

本質上,我希望能夠在泄漏內存中執行測試結果時失敗特定測試。

回答

0

不知道這一點,但你可以使用類似Fluid Studios的內存管理器代碼,並在你自己的鉤一些調整。或者將其編譯到您的測試應用程序中,然後爲每個測試運行一次應用程序並整理內存跟蹤結果。

4

如果您在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

+0

這不會失敗基於內存泄漏特定的測試... – 2009-06-16 13:46:59

+0

謝謝,我本來應該清晰。修! – 2009-06-16 15:57:10

3

默認情況下,CPPUNIT沒有內存泄漏檢查支持。

該項目現在已經重新開始(已停止很長一段時間),這可能是CPPUNIT2的一項功能,您可以向作者提出建議(或寫入)。

如果您正在尋找具有內存泄漏檢測支持的單元測試框架,您可以嘗試查看CppUTest。這是Martin Fowler和Bob Martin在某些TDD課程中使用的項目。這很不錯。

+0

CppUTest是我之前沒見過的東西......謝謝!看起來這裏有一些基本的內存測試支持。現在查看CppUnit 2文檔... – 2009-06-16 14:26:56

0

valgrind運行你的單元測試。我使用的單元測試框架允許您運行一個或多個單獨的單元測試,以便您可以檢測哪個單元導致泄漏。

2

在Windows這將是一個非常簡單的使用,以調試堆一些調用的事讓CppUnit的使用_CrtMemCheckpoint()_CrtMemDifference()此信息行事:

有缺點:

  • 你必須在測試開始時手動放置一些東西來獲得檢查點(也許有到融入的CppUnit莫名其妙的方式)
  • 它僅適用於Windows(有可能是在其他各種平臺上類似的東西)
  • 它只會爲工作建立與調試CRT
1

我在哪裏工作,我們建立我們的單元測試與淨化。然後,我們的持續集成平臺既提取成功/失敗的測試用例數量,也提取泄漏字節數(+ lint和覆蓋率結果),並將其顯示在網頁上。我強烈建議這樣做。

對不起,不提供你想要的解決方案。