【问题标题】:unittest.mock vs mock vs mocker vs pytest-mockunittest.mock vs mock vs mocker vs pytest-mock
【发布时间】:2022-01-28 04:58:26
【问题描述】:

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

【问题讨论】:

  • mock 最初是 Python 2.7 的第三方包,然后成为 Python 3 标准库的一部分,以 unittest.mock 提供。 pytest-mock 是一个 pytest 插件,它提供了一个 mocker 固定装置,它是 unittest.mock 的包装器,如下面的答案中所指出的,但具有附加功能。例如,它会在测试拆解时自动恢复测试中制作的所有补丁,确保测试隔离。请注意,mocker 只能用于pytest 样式的测试,例如如果您使用其他测试运行程序,它将无法被识别。

标签: python pytest tdd python-unittest pytest-mock


【解决方案1】:

所以 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() ...
    ...

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

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 2023-03-11
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多