我正在尋找的是一種以編程方式驗證目標對象已被釋放的方法。目前我在我希望觀察的對象的dealloc方法中有一個NSLog語句。 單元測試框架來自Google的Google Toolbox,並且它工作得很好。我只是不確定如何框架這個特定的測試。單元測試驗證對象獲取釋放
回答
您可以在某種事件監視器服務中記錄dealloc,以便測試代碼可以查詢是否發生了dealloc。顯然,你的名字或ID記錄它,因爲對象被dealloc'd ...
我可能很幼稚,但不會去配的單元測試包括
- 的分配對象,
- 的釋放都會通過你的方法進行測試,
- 試圖調用從對象的東西,然後
- 捕捉異常,看看它的類型是正確的?
有沒有例外 - 嘗試解除引用已經`免費`內存的指針將崩潰。 – 2008-11-18 19:18:44
我在C#/ .Net中做過類似於此的事情。我使用了「WeakReference」來跟蹤該項目,並測試它不再存在(請參閱鏈接)。你能將這種方法轉化爲你的環境嗎?
在過去,我已經創建了一個計算已經通過增加在構造函數中的值,並在析構函數遞減它分配一個給定類的對象的數量的變量。單元測試只是在測試結束時檢查變量是否爲零。
你可以調整dealloc
方法。見MethodSwizzling on CocoaDev;使用Leopard的新功能method_exchangeImplementations
的現代方法是(當前)接近頁面的底部。
您的實現需要告訴您的測試用例對象它已被調用。一種方法是在測試用例類和替換方法都定義的文件中使用靜態變量;您的測試方法將該變量設置爲NO
,然後釋放該對象,然後聲明該變量的值現在爲true。
我已經寫了釋放對象,如果對象得到了釋放返回YES
功能:
BOOL getsDeallocatedByReleasing(id object);
還有一個先進的界面,你可以在一個塊中運行任意代碼,你會得到一個布爾指示是否給定類的一個對象釋放:
BOOL classGetsDeallocated(Class c, void (^block)(void));
代碼使用方法交叉混合,它是相當醜陋,絕對不是線程安全的,但它的作品。你可以在GitHub找到它,如果我發現任何錯誤,我會保持更新。
P.S.在編寫完所有代碼後(d'噢!),是不是可以在開始時添加一個單獨的retain
,做任何你想要的操作,拆下正在檢查的對象圖並檢查對象的保留數?
- 1. Django驗證單元測試
- 2. 單元測試驗證
- 3. 測試對象是否已釋放
- 4. 單元測試域對象
- 5. 單元測試值對象
- 6. 單元測試條紋驗證註釋直接
- 7. 如何進行單元測試數據註釋驗證器
- 8. 單元測試沒有配置文件的struts2註釋驗證
- 9. 如何使用數據註釋驗證對ModelBind進行單元測試?
- 10. 春季單元測試JSR-303驗證
- 11. Yii項目單元測試:驗證器
- 12. ZF3單元測試身份驗證onBootstrap
- 13. 單元測試基本驗證
- 14. 流利的驗證單元測試
- 15. WF 4單元測試 - OverloadGroup驗證
- 16. 單元測試 - 驗證方法
- 17. 單元測試實體框架驗證
- 18. C#單元測試貨幣驗證
- 19. 幼蟲單元測試驗證
- 20. 單元測試驗證密碼
- 21. 單元測試和驗證邏輯
- 22. CakePHP - 單元測試驗證不叫
- 23. 如何在django單元測試中獲取請求對象?
- 24. 測試命令對象驗證
- 25. 通過釋放對象獲取崩潰
- 26. 請解釋單元測試
- 27. 單元測試:解釋模擬的用處對象
- 28. 獲取單元測試調試
- 29. 使用Coverage驗證器監控Google測試單元測試
- 30. 單元測試Web API - 如何獲得身份驗證令牌
謝謝,_GTMDevLog正是我正在尋找的,現在想弄清楚如何在我的單元測試目標中進行設置。 – 2008-11-17 17:40:33