假設你有20,或者你甚至有100,與Calc類做相反測試,所有這些看起來令人吃驚的相似,F在一個計劃的改變迫使你不得不刪除默認的Calc構造器并且使用一個含有一些參數的不同的構造器。馬上,你所有的測試就被暫停了。你可能可以很輕易的發現問題的關鍵并修復它,但你也可能做不到。最主要的問題是你將會浪費很多寶貴時間在修理你的測試上面。如果你在你的測試類之中使用一個整體的方法去創建Calc 實例,就像Figure 2所顯示的那樣,這些就并不是個問題。
我已經對測試做了一些改變已使它們能夠具有更多可維護性。首先,我將新創建的代碼遷移至可以再度使用的整體方法之中。這就意味著我只需僅僅改變一個簡單的方法以使得在這個測試類中的所有測試在一個新的構造器中的能夠正常的工作。另外一個為創造問題而設的簡單解決方法是把創作物遷移到測試類的
順便一提的是,請注意,我已經將方法命名為Factory_CreateDefaultCalc 。我很喜歡將我測試中的任何幫助方法用特殊的前綴來命名,這樣我就能很輕易的掌握它是做什么用的。這樣對易讀性也是非常有幫助的。
我的第二個改變是重新使用測試中的聲明代碼,并將這段代碼遷移到一個確認方法之中。所謂確認方法是你測試中的一個可再度使用的方法, 這個方法包含了一個聲明語句但是它可以接受不同輸入和在輸入的基礎上進行校驗。當你在不同輸入或者不同的初始狀態下一次又一次的聲明同一事物時,你可以使用確認方法。這一方法的優點是既使在一個不同的方法里面聲明,如果這個聲明失敗了你將可以繼續保有一個異常處理,而且原始調用測試將會顯示在測試失敗輸出窗口之中。
我也在Calc 中傳遞實例而不是使用一個局部變量,因此我知道我經常傳遞一個實例,而且這個實例是調用測試將其初始化的。當你想要改變對象狀態時你可能想要做同樣的事情,舉個例子來說,當在測試下或者在將會傳遞給測試的對象下配置特殊對象時,可以使用特殊的Configure_XX方法。這些方法應該能夠解釋他們配置一個對象將會用來做什么用。Figure 3之中的代碼就是以上方法的實例。
這個測試擁有很多設置代碼可以用來處理向注冊管理器對象中添加初始狀態,它是這個測試類之中的成員。在此的確也有一些重復。Figure 4顯示了在初始代碼之外這些事例在因式分解之后將會如何變化。
修訂測試具有非常高的可讀性和穩定性。僅僅需要注意的是不要那么的refactor你的測試,他們可能會以一個單一的,不可讀的代碼行作為結束。應該注意的是我在這里可能依然使用一個Verify_XX 方法,但是這并不是我真正要在這里加以說明的。
消除測試之間的依賴關系
文章來源于領測軟件測試網 http://www.kjueaiud.com/