我剛剛開始使用TDD,很快就遇到了一堵磚牆。這裏是我的情況... 我試圖模擬一個Image對象,並通過我已經開始與一個簡單的對象,最終成長爲TDD步驟去......在TDD中處理實現問題
public class ImageObject
{
public string Name {get; set;}
public int Width {get; set;}
public int Height {get; set;}
public bool IsValid()
{
//Some rules
}
}
當然義不容辭測試...
[Test]
public void ImageWidthCannotBeLessThanZero {...}
[Test]
public void ImageHeightCannotBeLessThanZero {...}
and so forth...
到目前爲止好。接下來,我想以某種方式表示類中的物理文件。這可能是一個文件路徑
public class ImageObject
{
public string Path {get; set;}
}
或一系列字節
public class ImageObject
{
public byte[] Bytes {get; set;}
}
的(請這不是關於數據庫的參數,相較於存儲文件系統)。
在這一點上我我感覺不舒服,因爲我的思想正在漂移,並開始考慮基礎設施/實施細節。 我的缺陷在哪裏?我應該在實施細節上做出決定嗎?我是否需要一個聰明的設計模式來處理這個問題?模擬框架會有幫助嗎?這是一個對象分析/設計問題,我應該使用UML工具? (等一下我以爲TDD是關於設計的?)
無論如何,我如何克服這個問題?我想繼續專注於設計我的對象,而不是現在考慮基礎設施問題?
你是說我現在不應該擔心物理文件嗎?而當我開始設計ImageObject的使用者時,我應該擔心這一點? – Fixer 2010-10-27 10:35:25
現在你可以開始思考這個問題了,我只是用TDD來說,根據行爲來做。就像在我的例子中,如果你需要獲取圖像的字節,你可能有一個GetBytes()方法,而不是直接訪問物理表示。然後你可以爲GetBytes()編寫測試,然後實現它,但是你需要物理上的。在這個發展階段,你可能會也可能不會關心。 – 2010-10-27 10:44:22
@Fixer - 單元測試是'ImageObject'的消費者 – Gutzofter 2010-11-02 15:28:21