unittest.mock vs mock vs mocker vs pytest-mock

问题描述 投票:0回答:2

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

python pytest tdd python-unittest pytest-mock
2个回答
9
投票

所以 pytest-mock 是 mock 的薄包装器,mock 是从 python 3.3 开始的。实际上与 unittest.mock 相同。我不知道 mocker 是否是另一个库,我只知道它是 pytest-mock 提供的用于在测试中完成模拟的夹具的名称。我个人使用 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() ...
    ...

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


0
投票

@NelsonGon 你可以使用

unittest
模拟与
pytest
,例如

def test_app_uses_correct_transformer(monkeypatch):
    mock_transformer = MagicMock()
    mock_transformer.return_value = None
    monkeypatch.setattr("app.transformer", mock_transformer)
© www.soinside.com 2019 - 2024. All rights reserved.