pytest:使用依赖注入与装饰器

时间:2012-10-11 09:13:28

标签: python dependency-injection pytest

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

我最近开始使用pytest的依赖注入来处理一些用例,包括@pytest.mark.parametrize(...)pytest_funcarg__XXX钩子。不幸的是,这与我们装饰的测试功能发生冲突。

我该如何做到这一点?

我的第一个想法是使用自定义标记,例如@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)

这样的方法能真正起作用吗?

1 个答案:

答案 0 :(得分:0)

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

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

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