2017-09-01 55 views
1

我在用pytest單元測試時遇到困難。Pytest在夾具前調用setup()

我使用的是測試類是這樣的:

class TestMyApp(object): 

    def setup(self): 
     self.client = mock_client() 

    @pytest.fixture 
    def client_item(self): 
     return self.client.create_item('test_item') 

    def test_something1(self, client_item): 
     # Test here. 
     pass 

當我運行上面的測試中,我得到以下異常:

AttributeError: 'TestMyApp' object has no attribute 'client' 

我相信這是因爲client_item()夾具功能時在setup()函數之前調用。

我是否正確使用燈具?或者有什麼辦法可以強制setup()在夾具功能之前被調用?

在此先感謝。

回答

1

燈具可以使用其他附着物,所以你可以用燈具一路下跌:

class TestMyApp(object): 

    @pytest.fixture 
    def client(self): 
     return mock_client() 

    @pytest.fixture 
    def client_item(self, client): 
     return client.create_item('test_item') 

    def test_something1(self, client_item): 
     # Test here. 
     pass 

documentation巧妙地建議過的xUnit風格的安裝/拆卸方法夾具:

雖然這些安裝/對於來自unittestnose背景的人來說,拆解方法很簡單和熟悉,您也可以考慮使用pytest更強大的fixture mechanism,它利用了依賴注入的概念,允許使用礦石模塊化和更具擴展性的管理測試狀態的方法,特別是對於大型項目和功能測試。

它接着說,兩種風格可以混合使用,但並不清楚其中的事情會發生的順序。