使用pytest.fixture选择退出函数



我有一个函数,我不想每次在Flask-RESTFul API中运行测试时都运行它。这是一个设置示例:

class function(Resource):
    def post(self):
        print 'test'
        do_action()
        return {'success':True}

在我的测试中,我想运行这个函数,但忽略do_action()。如何使用pytest实现这一点?

这似乎是标记测试的好机会

@pytest.mark.foo_test
class function(Resource):
    def post(self):
        print 'test'
        do_action()
        return {'success':True}

然后如果你用打电话

py.test -v -m foo_test

它将只运行那些标记为"foo_test"的测试

如果你用打电话

py.test -v -m "not foo_test"

它将运行所有未标记为"foo_test"的测试

您可以在测试中模拟do_action

def test_post(resource, mocker):
    m = mocker.patch.object(module_with_do_action, 'do_action')
    resource.post()
    assert m.call_count == 1

因此,在本次测试中不会调用实际函数,这带来了额外的好处您可以检查post实现是否实际在调用该函数。

这需要pytest mocker安装(无耻的插头)。

最新更新