2016-01-21 55 views
-1

根據我正在運行的測試,是否可以配置setUp方法以使用不同的參數? 在setUp方法中,我有一個類,我想用不同的參數實例化,具體取決於我正在運行的測試。我明白,通常這就是測試方法的用處,但我需要在setUp之前實例化該類。爲測試類中的每個測試定製的設置

我擁有的解決方案是創建另一個方法,它可以完成我想要setUp做的所有事情,然後在每個測試中調用它,但是我想知道內置的setUp方法是否能夠做到這一點?

我知道下面的例子不起作用,因爲setUp沒有引用任何參數,但我正在尋找這些行的內容。

此外,什麼會是更好的替代呢?

例子:

class TestComponents(unittest.TestCase): 

    def __init__(self, *args, **kwargs): 
     self.app = MyApplication() 
     unittest.TestCase.__init__(self, *args, **kwargs) 

    def setUp(component): 
     self.app.start([component]) 

    def testComponent1(): 
     # test continues here 

    def testComponent2(): 
     # test continues here 
+0

你可以像'mySetUp(self,** attrs)'這樣的方法並在測試中手動調用它嗎? – ddsnowboard

+0

如果setUps根本不常見,則應該使用測試方法進行初始化。如果一些設置很常見,應該將它們放在單獨的測試套件中。無論如何,我想我們在這裏嘗試解決[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。您能否向我們展示一些代碼,讓我們更好地瞭解您在此嘗試完成的工作? –

+0

是的,這是我想要做的,但我正在尋找一個更優雅的解決方案。這聽起來像是一個測試人員可能想要經常做的事情,並且認爲可能有一個開箱即用的解決方案。 – Spektor

回答

1

定義一個基類的測試。方法setUp可以引用一個類屬性,該屬性將包含您想要改變的參數。

class TestBase(unittest.TestCase): 
    def setUp(self): 
     # do something with self.MYPARAMETER 

然後除以你的測試一組子類中,每一個不同的定義MYPARAMETER。您可能或可能不需要在本地定義setUp,具體取決於代碼本身是否需要擴展到 以上,您可以在TestBase.setUp中輸入。

class Test1(TestBase): 
    MYPARAMETER = 1 
    def setUp(self): 
     TestBase.setUp(self) 
     # etc 

class Test2(TestBase): 
    MYPARAMETER = 17 
    def setUp(self): 
     TestBase.setUp(self) 
     # etc 
+0

謝謝,這是一個很好的選擇。 – Spektor

+0

重寫'__init__'的方法也可能很有用,但可能需要編寫一個自定義測試運行器。我從來沒有真正看待測試類如何最終實例化。 – chepner

相關問題