2012-09-07 142 views
0

我有一個unittest測試文件包含四個測試類,每個測試類負責在一個特定的類上運行測試。每個測試課程使我們完全相同set-upteardown方法。 set-up方法相對較大,啓動約20個不同的變量,而teardown方法只是將這20個變量重置爲其初始狀態。python單元測試家務

到目前爲止,我一直把這20個變量放在四個setUp類的每一箇中。這有效,但不容易維護;如果我決定改變一個變量,我必須在所有四個setUp方法中改變它。然而,我尋找更優雅的解決方案失敗了。理想情況下,我只想輸入一次我的二十個變量,然後在四種方法中分別調用它們,然後在每種測試方法之後將它們拆下。考慮到這一點,我嘗試將變量放在一個單獨的模塊中,並在每個setUp中導入這些變量,但當然這些變量只能在設置方法中使用(另外,儘管我無法確切地說明原因,這種感覺就像做

from unittest import TestCase 

class Test_Books(TestCase): 
    def setup(): 
     # a quick and easy way of making my variables available at the class level 
     # without typing them all in 

    def test_method_1(self): 
     # setup variables available here in their original state 
     # ... mess about with the variables ... 
     # reset variables to original state 

    def test_method_2(self): 
     # setup variables available here in their original state 
     # etc... 

    def teardown(self): 
     # reset variables to original state without having to type them all in 



class Books(): 
    def method_1(self): 
     pass 

    def method_2(self): 
     pass 
+0

顯示實際的代碼,而不是說明你正在做什麼的評論,而不是顯示你在做什麼時,確切的代碼是問題。 – geoffspear

回答

1

另一種方法是把20個變量成一個單獨的類,在該類的__init__中設置的值,然後訪問數據作爲class.variable,從而唯一的地方設置變量s的__init__和碼S不重複。

class Data: 
    def __init__(self): 
     data.x= ... 
     data.y = .... 

class Test_Books(TestCase): 
    def setup(): 
     self.data = Data() 

    def test_method_1(self): 
     value = self.data.x # get the data from the variable 

如果二十個數據彼此相關,則該解決方案更有意義。此外,如果您有二十條數據,我希望它們是相關的,因此它們應該結合在真實的代碼中,而不僅僅是在測試中。

+0

選擇了這個作爲我的答案,因爲它更接近我希望能夠做到的,並且不需要繼承TestCase的子類。再次感謝。 –

1

我會做的是使4測試類每一個基礎測試類的子類,這本身就是TestCase的一個子類。然後把SETIP和拆卸的潛在問題多發的方式在基類和其他人休息。

class AbstractBookTest(TestCase): 
    def setup(): 
     ... 

class Test_Book1(AbstractBookTest): 
    def test_method_1(self): 
    ... 

另一種方法是讓一個班級不是你所擁有的四個班級,除非你給出了拆分的理由,否則這裏的四個班子似乎更具邏輯性。

+0

>>>另一種方法是製作一個班級,而不是四個班級......我想我是這樣安排的,因爲對於我正在測試的每個班級都有一個測試班級似乎是明智的,我認爲您這樣認爲:並不是絕對必要的,特別是因爲課程實際上非常小。我也喜歡你的第一個想法,所以會一起去。 –

+0

@PaulPatterson - 我誤解了你的問題我以爲你只是在測試一個課程 - 忘記了答案的這一部分。 – Mark

+0

不用擔心。我已經完成了子類的事情,它很好地工作。謝謝! –