2016-09-08 48 views
7

在pytest的文檔中列出了測試用例的各種例子。他們中的大多數顯示功能的測試。但是我錯過了一個如何測試類和類方法的例子。比方說,我們有以下類模塊cool.py在我們喜歡測試:用pytest測試類的方法

class SuperCool(object): 

    def action(self, x): 
     return x * x 

如何在tests/test_cool.py的根據測試類來看看?

class TestSuperCool(): 

    def test_action(self, x): 
     pass 

如何test_action()用於測試action()

回答

5

所有你需要做的測試類方法是實例化類,並調用該方法在該實例:

def test_action(self): 
    sc = SuperCool() 
    assert sc.action(1) == 1 
+0

那麼,有沒有一種映射的參與pytest? – laserbrain

+0

@laserbrain你是什麼意思的映射? –

+0

@laserbrain我不確定你在這種情況下通過映射意味着什麼,但是如果你嘗試它,我的例子應該適合你。 – elethan

2

嗯,一種方法是測試方法中,以剛剛創建的對象和互動它從那裏:

def test_action(self, x): 
    o = SuperCool() 
    assert o.action(2) == 4 

可以明顯地使用類似經典setupteardown風格單元測試這裏使用方法:http://doc.pytest.org/en/latest/xunit_setup.html

我不是100%如何使用它們,因爲pytest的文檔是可怕的

編輯:是啊所以很明顯,如果你這樣做

class TestSuperCool(): 
    def setup(self): 
     self.sc = SuperCool() 

    ... 

    # test using self.sc down here 
0

我只會用任何夾具來創建測試環境(如數據庫連接)或數據參數化。與參數化

def test_action_without_fixtures(): 
    sc = SuperCool() 
    sc.element = 'snow' 
    sc.melt() 
    assert sc.element == 'water' 

例:

如果你的數據是比較瑣碎,你可以將其定義測試用例裏面

@pytest.mark.parametrize("element, expected", [('snow', 'water'), ('tin', 'solder')]) 
def test_action_with_parametrization(element, expected): 
    sc = SuperCool() 
    sc.element = element 
    sc.melt() 
    assert sc.element == expected