0

我正在用 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 在我的单元测试中模拟类和模块?

4

1 回答 1

0

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

于 2016-06-10T07:36:57.817 回答