1

在工作中,我们在选定的测试函数上使用装饰器@rollback,它将回滚在该测试期间所做的任何数据库更改。

我最近开始在一些用例中使用 pytest 的依赖注入,包括 with@pytest.mark.parametrize(...)pytest_funcarg__XXXhook。不幸的是,这与我们装饰的测试功能相冲突。

我怎样才能使这项工作?

我的第一个想法是使用自定义标记,说@pytest.mark.rollback并做类似的事情:

def rollback(meth):
    """Original rollback function"""
    ...

def pytest_runtest_setup(item):
    if not isinstance(item, pytest.Function):
        return
    if hasattr(item.obj, 'rollback'):
        item = rollback(item)

这样的方法真的可行吗?

4

1 回答 1

0

像这样的东西应该可以正常工作,是的。似乎您正在使用全局状态来管理您的数据库,对吧?您可能想查看即将发布的 2.3 版本的文档,该版本在此页面下方还有一个“交易”示例:

http://pytest.org/dev/fixture.html

该版本现在可以随时发布,您可以使用“pip install -i http://pypi.testrun.org -U pytest”安装候选人。

于 2012-10-11T10:29:25.877 回答