如何在py.test中的patchmonkey中设置类或模块属性

时间:2016-06-09 08:26:39

标签: python unit-testing pytest fixture

我正在用Python开始一个小项目,我想用py.test创建一个单元测试。 我需要修补pymongo模块或MongoClient类。 所以我试过这样的事情:

@pytest.fixture(scope='module')
def mock_pymongo(monkeypatch):
    monkeypatch.setattr('pymongo', mongomock)

或者像这样:

@pytest.fixture(scope='class')
def mock_pymongo(monkeypatch):
    monkeypatch.setattr('pymongo.mongo_client.MongoClient', mongomock.mongo_client.MongoClient)

现在在两个测试中我都在做我的范围不匹配错误

scopeMismatch: You tried to access the 'function' scoped fixture 'monkeypatch' with a 'module' scoped request object, involved factories
tests/test_1.py:17:  def mock_pymongo(monkeypatch)

也许我正在使用正确的工具 但有没有办法使用monkeypatch来模拟我的单元测试中的类和模块?

1 个答案:

答案 0 :(得分:0)

scope参数没有指定要修补的内容 - 它指定了灯具的使用寿命。使用默认范围(module),修补将在每次测试之前发生,并在测试之后恢复。这通常是你想要的行为。