【发布时间】:2015-11-05 21:09:04
【问题描述】:
我正在猴子修补数据库连接类作为固定装置。我想要完成的是将一些参数传递给我的猴子补丁夹具,因为不同的测试都需要相同的猴子补丁,但返回值不同。
@pytest.fixture
def data():
now = datetime.datetime.now()
data = Data(now)
return data
@pytest.fixture
def patch_db(monkeypatch):
class FakeDbConnection:
def __init__(*args, **kwargs):
pass
def fetchall(self):
return [1,2,3]
monkeypatch.setattr(DbConnection, 'execute', FakeDbConnection)
def test_get_somevalue(patch_db, data):
userids = data.get_userids()
assert userids == [1,2,3]
def test_get_something_else(patch_db, data):
userids = data.get_userids()
assert userids == [6,7,8]
我遇到的问题是,因为我的 fetchall 函数只返回 [1,2,3]。我试图让 patch_db 夹具获取参数:
@pytest.fixture(scope='module', params=[[1, 2, 3], [4, 5, 6]])
def patch_db(monkeypatch, test_values):
class FakeDbConnection:
def __init__(*args, **kwargs):
pass
def fetchall(self):
return test_values.param
monkeypatch.setattr(DbConnection, 'execute', FakeDbConnection)
但我收到以下错误:
ScopeMismatch: You tried to access the 'function' scoped fixture 'monkeypatch' with a 'module' scoped request object, involved factories
【问题讨论】:
-
你为什么在夹具中使用
scope='module',你需要这样吗?如果你放下那部分,它应该可以正常工作。