2011-01-31 101 views
4

我是新的測試驅動開發人員,並且第一次嘗試在簡單的項目中使用它。TDD重複測試數據

我有一個類,我需要測試創建,插入和刪除這個類的對象。如果我編寫三個獨立的測試函數,我需要在其他函數中複製初始化代碼。如果我把所有的測試都放在一個測試函數中,那麼這與每個函數的一個測試是矛盾的。我該怎麼辦?

這裏的情況:

tst_create() 
{ 
    createHead(head); 
    createBody(body); 
    createFoot(foot); 
} 

tst_insert() 
{ 
    createHead(head); 
    createBody(body); 
    createFoot(foot); 

    obj_id=insert(obj); //Also I need to delete obj_id somehow in order to preserve old state 
} 

tst_delete() 
{ 
    createHead(head); 
    createBody(body); 
    createFoot(foot); 

    obj_id=insert(obj); 

    delete(obj_id); 
} 

VS

tstCreateInsertDelete() 
{ 
    createHead(head); 
    createBody(body); 
    createFoot(foot); 

    obj_id=insert(obj); 

    delete(obj_id); 
} 

回答

4

因素出在你測試的重複。

根據您的測試框架,可能會支持定義在每次測試執行前調用的安裝方法以及在每次測試後調用的拆卸方法。

無論如何,您可以提取常用的東西,以便您只需重複調用一個共享設置。

如果您告訴我們您使用的語言和測試框架,我們可能會提供更具體的建議。

+0

C++和Qt框架。 – metdos 2011-01-31 14:40:37

+0

我不能再幫助C++和Qt,但其他人可能會更進一步。 – 2011-01-31 16:13:14

6

而不是「每個功能的一個測試」,試着將其考慮爲「每個功能的行爲的一個方面」。

什麼插入物體給你?如何刪除一個對象?爲什麼這些很有價值?你怎麼能告訴你做了他們?編寫一個如何使用代碼的例子,以及爲什麼這種行爲是有價值的。那就成了你的考驗。

當您計算出您感興趣的行爲後,只有在測試更易於讀取時,才能提取出重複項。 TDD不僅僅是測試;它還涉及提供文檔,並幫助您考慮每個代碼元素的責任和代碼的設計。測試可能會比他們寫的要多得多,所以可讀性必須首先考慮。

如有必要,請將您感興趣的所有行爲放在一個方法中,並確保其可讀性。您可以根據需要添加註釋。