unittest.mock、mock、mocker和pytest-mock之间有什么区别



我是Python开发的新手,我正在使用pytest编写测试用例,其中我需要模拟一些行为。在谷歌上搜索pytest的最佳mocking库只会让我感到困惑。我见过unittest.mock、mock、mocker和pytest-mock。不太确定该用哪一个。有人能给我解释一下它们之间的区别吗?还可以给我推荐一个吗?

pytest mock是一个围绕mock的瘦包装器。

mock是从python 3.3开始的。实际上与unittest.mock.相同

我不知道mocker是否是另一个库,我只知道它是pytest-mock提供的用于在测试中完成mocking的fixture的名称。

我个人在测试中使用pytest和pytest-mock,这允许您编写像这样非常简洁的测试

from pytest_mock import MockerFixture
@pytest.fixture(autouse=True)
def something_to_be_mocked_everywhere(mocker):
mocker.patch()

def tests_this(mocker: MockerFixture):
mocker.patch ...
a_mock = mocker.Mock() ...
...

但这主要是由于使用了fixture,这已经被指出是pytest-mock提供的。

@NelsonOn您可以将unittest模拟与pytest一起使用,例如

def test_app_uses_correct_transformer(monkeypatch):
mock_transformer = MagicMock()
mock_transformer.return_value = None
monkeypatch.setattr("app.transformer", mock_transformer)

最新更新