如何提取一個測試層次結構[1]

發表于:2010-01-05來源:作者:點擊數: 標簽:結構
何提取一個測試層次結構[1] 軟件測試 問題: 如果有多個共享一些通用對象的測試模塊,這些對象在用于實現測試模塊的幾個 TestCase 類中式重復的。你想要復用這些對象,而不是復制它們。 情景: 這個問題在編寫客戶端或端到端測試的時候尤為常見——就是那些

       何提取一個測試層次結構[1]   軟件測試

  問題:

  如果有多個共享一些通用對象的測試模塊,這些對象在用于實現測試模塊的幾個TestCase類中式重復的。你想要復用這些對象,而不是復制它們。

  情景:

  這個問題在編寫客戶端或端到端測試的時候尤為常見——就是那些為整個系統而不是為某個類所做的測試。偶爾Junit用戶——那些幾乎完全依賴 JUnit作為測試驅動的開發工具的人——會忘記那些從來不使用Junit的、非測試驅動程序員,因為JUnit提供了一個易于使用的Java框架來編寫測試程序。說這些是因為一個測試驅動的程序員會說:“如果你有一個這么大的測試模塊,那你的測試代碼就太大了,必須要修改測試代碼使其只專注于系統的一個方面。如果你這樣做了,那問題就會得到解決”。其實說的沒錯,可是這話是典型的數學家的語言:專注,精確,然而毫無用處。

  如果能夠精簡測試模塊或者能夠找出其中沒有被所有測試所共享的部分,那就更好了:我們更喜歡簡單的測試用例層次結構。如果已經無法將事情簡化——或者是看不出該如何做--那也至少應該試著將通用的測試模塊移到一個地方。

  技巧:

  解決這個問題的技巧說來很簡單:盡管編寫的是測試程序,但它們還是用方法和對象實現的,所以將其當作方法和對象來看待。一個從一組類中抽取重復行為的辦法是,應用抽取超類的重構方法創建一個類層次結構。具體步驟如下:

  1. 選擇兩個有通用測試模塊的測試用例類。

  2. 創建一個新的TestCase的子類,它是有重復的測試模塊的測試用例類的超類。在這里,我們將這個新類叫做BaseFixture,這個是各人自己取的。

  3. 將BaseFixture類聲明為抽象類,沒有必要創建這個類的實例。

  4. 修改測試用例類代碼,使其繼承自BaseFixture而不是直接繼承TestCase。

  5. 將重復的測試模塊復制到BaseFixture中——就是說,復制參數域和setUp()方法中初始化參數域的代碼??赡苄枰薷膮涤?,將其聲明成受保護的而不是私有的,否則測試用例類就不能使用它們??梢詫涤蚍庋b在一個受保護的get方法里面,但是在這個例子中我們覺得沒必要這樣做。

  6. 從每一個測試用例類中刪除測試模塊參數域,從setUp()方法中刪除已經移到BaseFixture中的代碼。

  7. 在每個測試用例類的setUp()方法的開始加上一行super.setUp()。

  8. 現在可以重新編譯運行此測試程序,來驗證其行為并沒有改變??梢詫ΡM可能多的共享通過測試模塊對象的測試用例類重復上述步驟。

  另外在驗證了做完上述步驟沒有帶來任何問題以后,要看看那些setUp()方法中是否可以刪除一些空的或只有一行super.setUp()的方法。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97