2017-01-23 32 views
0

我想運行一系列Python單元測試,它們都共享相同的setUp方法。但是,測試的一個子集需要更大,更具體的一組變量。實現這一點的一種方法是定義一個輔助功能,並在「更具體」測試每次調用它:如何用Pytest夾具定義其他實例變量

import unittest 

class TestFixtures(unittest.TestCase): 
    def setUp(self): 
     self.a = 1 

    def additional_setup(self): 
     self.b = 1 

    def test_check_value(self):   # Ordinary test 
     self.assertEqual(self.a, 1) 

    def test_add_variables(self):  # More specific test requiring 'self.b' to be defined 
     self.additional_setup() 
     self.assertEqual(self.a + self.b, 2) 

if __name__ == "__main__": 
    unittest.main() 

在我看來,這樣可以更優雅的使用Pytest fixtures來完成,但沒有一個實例我看到使用固定裝置和傳統的方法setUp。我怎樣才能使用Pytest fixture來定義其他變量?

什麼我試過到目前爲止

其實我一直無法簡單地定義一個變量來使用夾具後測試的情況下使用。例如,

import pytest 
import unittest 

class TestFixtures(unittest.TestCase): 
    @pytest.fixture 
    def additional_setup_fixture(): 
     b = 1 

    def test_use_fixtures(additional_setup_fixture): 
     print b 

if __name__ == "__main__": 
    unittest.main() 

產生NameError: global name 'b' is not defined.。我怎樣才能定義變量用於測試(或者創建本地變量或實例變量)與Pytest夾具?

回答

0

下面是Pytest夾具大致等效試驗:

import pytest 

@pytest.fixture 
def generate_variables(): 
    a = 1 
    b = 2 
    return a, b 

def test_trivial(generate_variables): 
    a, b = generate_variables 
    assert a+b == 3 

if __name__ == "__main__": 
    pytest.main([__file__]) 

據我所知,使用Pytest當它不再需要爲測試是一類從unittest.TestCase繼承的方法。在test_trivial之內,局部變量generate_variablesgenerate_variables函數(即,元組(a, b))的輸出,而不是函數本身,因爲它用裝飾器標記了@pytest.fixture