在测试之前Pytest调用setup()

时间:2017-09-01 15:43:26

标签: python python-3.x unit-testing pytest

我在使用我的pytest单元测试时遇到困难。

我正在使用这样的测试类:

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() fixture函数。

我是否错误地使用了灯具?或者是否有某种方法可以在夹具功能之前强制调用setup()

提前致谢。

1 个答案:

答案 0 :(得分:2)

灯具可以使用其他灯具,因此您可以一直使用灯具:

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来利用依赖的概念注入,允许更模块化和更可扩展的方法来管理测试状态,特别是对于大型项目和功能测试。

接着说两种风格可以混合,但不清楚事情发生的顺序。