是否可以在pytest中禁用固定装置?
我要这样做的原因是,我正在使用自己的夹具框架,目前是这样的(不同夹具机制的优缺点不是此问题的重点):
import functools
def with_fixtures(test_func):
@functools.wraps(test_func)
def wrapper(self, *args, **kwargs):
# This simplified code reproduces the problem -- the real implementation passes
# an object instead of a dummy
return test_func(self, "dummy fixtures", *args, **kwargs)
return wrapper
class Test:
@with_fixtures
def test(self, fixtures):
print("fixtures %s" % (fixtures, ))
pass
如果我在另一个框架上运行该测试,则我的with_fixtures
装饰器会将一个夹具对象传递给该测试。如果我在上面运行pytest,我会得到:
def test(self, fixtures):
E fixture 'fixtures' not found
为了禁用pytest固定装置,我宁愿在本地用装饰器标记单个测试,而不是将代码添加到我的测试没有显式依赖项的特殊文件(如conftest.py
)中,因此在本地更容易查看为什么测试表现如此?
答案 0 :(得分:0)
如果要对pytest隐藏参数,请使用funcsigs / inspect中的签名对象,告诉pytest函数没有参数
或者有自己的不使用治具系统的测试项目
pytest当前不支持替换治具系统,因此您必须与之抗争
答案 1 :(得分:0)
PyTest 使用 inspect.signature
,它可以被 __signature__
覆盖。要从签名中删除一个参数,一个简单的方法是获取
functools.partial(func, None)
(使用第一个位置参数)或functools.partial(func, kw=None)
(使用关键字参数 kw
)。def with_fixtures(test_func):
@functools.wraps(test_func)
def wrapper(self, *args, **kwargs):
# This simplified code reproduces the problem -- the real implementation passes
# an object instead of a dummy
return test_func(self, "dummy fixtures", *args, **kwargs)
wrapper.__signature__ = inspect.signature(functools.partial(test_func, None))
return wrapper