物件母親

2006 年 10 月 24 日

物件母親是一種用於測試的類別,用於協助建立範例物件,供您用於測試。

當您在相當規模的系統中撰寫測試時,您會發現必須建立大量的範例資料。如果我想測試員工的病假計算,我需要一個員工。但這不只是一個簡單的物件 - 我需要員工的婚姻狀況、扶養人數、一些就業和薪資歷史。這可能會產生大量的物件需要建立。這組資料通常稱為測試固定裝置。

第一步是在 xunit 測試的設定方法中建立固定裝置 - 這樣就可以在多個測試中重複使用。但這會遇到的問題通常是您需要在多個測試類別中使用類似的資料。在這個時候,擁有可以傳回標準固定裝置的工廠物件是有意義的。也許是「John」,一位上週才剛受雇的員工;「Heather」,一位已經待了十年的員工。

物件母親只是一個這樣的工廠的朗朗上口的名稱。這個名稱是在世紀之交的一個 Thoughtworks 專案中創造出來的,而且夠朗朗上口而流傳下來。

物件母親產生的罐頭物件會讓團隊感到熟悉,甚至經常會入侵與使用者的討論。在這個方面,它們類似於角色的概念 - 儘管它們並不總是人。它們可能是保險保單、供應合約,也就是測試架構所需的任何資料。在多個測試中使用類似的資料有助於人們熟悉您正在使用的範例。

這些罐頭物件通常不只適用於特定測試,但通常可以透過一些額外的設定讓它適用。「讓我們以 John 為例,讓他兩個月前就請病假。」偶爾你會需要將新的罐頭物件加入母物件,但如果可以的話,請嘗試調整現有的罐頭物件 - 這樣一來,如果測試的讀者熟悉現有的罐頭物件,他們就能更快理解。

通常你會需要產生多種物件,因此針對不同的類別建立不同的母物件會很方便:例如 CustomerMotherProductMother 等。

物件母物件確實有其缺點。特別是,許多測試會依賴母物件中的確切資料,因此會產生嚴重的耦合。結果是,如果你想因為任何原因變更該標準資料,就會很棘手。類別的變更也會導致需要變更測試 - 儘管這在任何情況下都會是個問題。

進一步閱讀

Peter Schuh 和 Stephanie Punke 為 XP Universe 撰寫了一篇關於物件母物件的論文