編寫標準的TDD [測試]方法會暴露常見的內存問題是否有用?標準.Net TDD內存測試
這組測試可以很容易地被快速應用到一個方法,並且會導致經典的.NET內存問題出現紅色故障,但是會使傳統的解決方案變綠。
例如,常見的內存問題可能是:垃圾收集器的太多重定位 ;分配太多;太多垃圾回收(經典示例比StringBuilder優先於字符串reallocs);堅持記憶太久(經典的示例調用處理,並且不停留在終結器上);不適當地達到g1,g2,LOH的物體;隨着時間的推移,一些重大的漏洞加起來......等等。
也許代碼可能是這個樣子......
[Test]
public void Verify_MyMethodUnderTest_Is_Unlikely_To_Have_Common_Memory_Problem()
{
//-Setup
var ExpectationToleranceA = ...
var ExpectationToleranceB = ...
...
//-Execute
var MeasurementA = MyClassUnderTest.MyMethodUnderTest(dependancyA) ;
var MeasurementB = MyClassUnderTest.MyMethodUnderTest(dependancyB) ;
…
//-Verfiy
Assert.That( MeasurementA , Is.WithinTolerance(ExpectationToleranceA )) ;
Assert.That( MeasurementB , Is.WithinTolerance(ExpectationToleranceB )) ;
}
有內存壓力問題的其他職位,但這裏的想法是能夠在一個方法來快速指向一個標準的測試和測試將紅色 - 在常見/經典的內存壓力問題上失敗,但綠色 - 通過常見的解決方案。然後,開發人員可能會指出檢查失敗的代碼,並可能修復泄漏,更改公差甚至刪除TDD內存壓力測試。
這個想法有腿嗎?
C++應用程序有一個相關的問題,Memory leak detection while running unit tests,這是一個類似的問題,但不完全相同的事情。 TWK的問題指向看着所有的測試都運行完畢後的記憶......
我在這裏的想法是讓.NET來 1)單元測試,共同記憶每個方法發出 2)失敗的經典內存問題 3 )將經典修補程序傳遞到經典常見內存問題 4)能夠快速在功能上進行快速標準測試,以查看其是否顯示經典症狀 5)能夠升級標準TDD .Net內存壓力測試單元測試。這意味着對上述代碼進行重構,以便標準測試的升級將改變整個Nunit測試套件中針對項目應用的內存測試。
(附註:我知道有沒有Is.WithinTolerance電話,但我只是展示一個想法。) 歡呼......
是的,GC是不可預知的,但可能會告訴傳說中的更大問題的跡象,如給皮膚過敏測試。這可能是「皮膚測試」功能。是的,我的想法不符合TDD單元測試的原始思路。在生產之前確定具有問題的功能將是有用的,... – judek 2009-02-20 23:12:48