模拟包周围的薄包装便于py.test使用

pytest-mock的Python项目详细描述


用法

mocker fixture的api与 mock.patch , 支持相同的参数:

deftest_foo(mocker):# all valid callsmocker.patch('os.remove')mocker.patch.object(os,'listdir',autospec=True)mocked_isfile=mocker.patch('os.path.isfile')

支持的方法有:

为了方便起见,可以从 mocker 直接访问 mock 模块中的这些对象:

间谍

在所有情况下,间谍的行为都与原始方法完全相同,只是它允许使用 mock 它的特性,比如检索调用计数。它也适用于类和静态方法。

deftest_spy(mocker):classFoo(object):defbar(self):return42foo=Foo()mocker.spy(foo,'bar')assertfoo.bar()==42assertfoo.bar.call_count==1

存根

存根是一个接受任何参数的模拟对象,对于测试回调非常有用。 可能会在repr中传递一个要由构造的存根对象使用的名称(用于调试)。

deftest_stub(mocker):deffoo(on_something):on_something('foo','bar')stub=mocker.stub(name='on_something_stub')foo(stub)stub.assert_called_once_with('foo','bar')

改进了模拟调用断言错误的报告

这个插件monkeypatches模拟库来改进pytest的失败输出 通过隐藏内部回溯 模拟模块中的条目。

当 调用helper方法。此功能捕获在 方法,并使用py.test自己的高级断言 差异:

mocker = <pytest_mock.MockFixture object at 0x0381E2D0>

    def test(mocker):
        m = mocker.Mock()
        m('fo')
>       m.assert_called_once_with('', bar=4)
E       AssertionError: Expected call: mock('', bar=4)
E       Actual call: mock('fo')
E
E       pytest introspection follows:
E
E       Args:
E       assert ('fo',) == ('',)
E         At index 0 diff: 'fo' != ''
E         Use -v to get the full diff
E       Kwargs:
E       assert {} == {'bar': 4}
E         Right contains more items:
E         {'bar': 4}
E         Use -v to get the full diff


test_foo.py:6: AssertionError
========================== 1 failed in 0.03 seconds ===========================

当使用多个/嵌套参数断言模拟调用并尝试 以快速看出区别。

此功能可能是安全的,但如果遇到任何问题,可以在 您的 pytest.ini 文件:

[pytest]mock_traceback_monkeypatch=false

请注意,使用 --tb=native选项会自动禁用此功能。潜在的 用于禁止来自 mock 模块的回溯条目的机制不适用于该选项 另外,由于异常链接,它在Python3.5上生成了令人困惑的消息

使用独立的"模拟"软件包

版本1.4.0中的新功能。

python 3用户可能希望使用pypi上发布的最新版本的模拟包。 而不是python发行版的版本。

[pytest]mock_use_standalone_module=true

这将强制插件导入mock而不是与 Python3.4+。注意,这个选项只在Python3+中使用,因为Python2用户只有 无论如何都要使用来自pypi的模拟包。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaFX进度条从单独的函数更改而来   jvm使用java服务器选项   java在<li>元素中查找同名的最后一个链接   java问题将参数传递给不同公共类中的构造函数   如何在php中从java函数中获取字符串   java如何在Android中动态显示多个tile   java仅使用Ribbon而不使用任何服务注册表是否可以实现负载平衡?   Jersey 1.19版本的java Swagger JAXRS出现“冲突URI模板”错误   带H2数据库的java Spring boot jpa   从12:00:00到00:00:00的日期转换   Android中的java如何设置文本?   java密钥库“不支持的保护参数”   http使用Java在Java中发送httprequest。净包   SpringJava刷新数据库   java在Spring Boot应用程序中使用嵌入式MongoDb和MongoTemplate失败   java需要什么MatOfMatch对象?   xml使用Java中的合并算法将两个值合并为单个值   java SQLite数据库不保存数据为什么不工作