2
我是猴子修補數據庫連接類作爲夾具。我想要完成的是將一些參數傳遞給我的猴子修補夾具,因爲不同的測試都需要相同的monkeypatch,但返回值不同。pytest夾具參數與monkeypatch
@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夾具採取PARAMS:
@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'',你需要這樣嗎?如果你放棄那部分它應該工作正常。 – Sebastian