模拟包周围的薄包装便于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第三方库


热门话题
java如何使用“Wed,01 Jul 2015 17:32:41 EDT”解析字符串   java Storm apache升级(1.0.0到2.0.0)   java类驻留在不同的目录中,而不是包指定的目录。为什么?   将Java中的图像缩放到非常小的维度   java如何通过子文档从自定义方面访问ElasticSearch parentdoc字段   java如何在RationalSoftwareArchitect中使用findbugs?   Java中的事件提升处理   java值被添加到arrayList的所有索引中,而不是在“”时添加到最后一个索引中。正在使用arraylist的add()方法   JFrame中的java JPanel派生类   java如何用循环和异步方法模拟类   java Android阻止可绘制背景超出视图范围   为客户排序Java阵列   java Apache poi如何将工作表设置为枚举位置值属性?   java Rhino在使用自定义类参数调用javascript函数时出错   java格式化日期从年月日到年月日   spring如何修复java。lang.illegalargumentexception在此特定场景中是否尝试创建具有null实体的合并事件?   java如何创建更好的对象