python – 模拟类和断言方法调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 模拟类和断言方法调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1633字,纯文字阅读大概需要3分钟。
内容图文
![python – 模拟类和断言方法调用](/upload/InfoBanner/zyjiaocheng/761/6f674a63fbb24a14bf7079a475f6b6ff.jpg)
难以理解如何模拟一个类,并能够断言它的’方法是用一些参数调用的.当我断言调用时,我得到一个“未调用”断言但是,我可以在mock_calls属性中看到方法调用.
沙盒/ module.py
class Subject(object):
def __init__(self):
pass
def run(self, *args, **kwargs):
reference = Reference(*args, **kwargs)
reference.method_a(*args)
class Reference(object):
def __init__(self, *args, **kwargs):
pass
def method_a(self, *args):
pass
test.py
import unittest
from unittest import mock
from sandbox.module import Subject
class TestSandbox(unittest.TestCase):
@mock.patch('sandbox.module.Reference')
def test_method_calls(self, mock_reference):
subject = Subject()
subject.run(1, 2, 3, x=44, y=55, z=66)
mock_reference.assert_called_with(1, 2, 3, x=44, y=55, z=66)
mock_reference.method_a.assert_called_with(1, 2, 3)
结果是
AssertionError: Expected call: method_a(1, 2, 3)
Not called
mock_reference.mock_calls的值是
[
call(1, 2, 3, x=44, y=55, z=66),
call().method_a(1, 2, 3)
]
如果我访问call为call().method_a我可以访问方法详细信息但是,mock_calls会添加一个项调用().这可能会以一种我不会期望的方式改变assert_called_once_with,并且感觉不太对劲.此外,如果使用autospec = True,我需要再次传递params.在mock_reference.call.method_a中使用just调用也不起作用.
访问call()时,输出mock_call.方法_a.mock_calls
mock_reference().method_a.mock_calls
[
call(1, 2, 3, x=44, y=55, z=66),
call().method_a(1, 2, 3),
call()
]
mock_reference.assert_called_once_with(1, 2, 3)
AssertionError: Expected 'Reference' to be called once. Called 2 times.
解决方法:
你嘲笑了一个类,但第二个方法是在实例上调用的.更改
mock_reference.method_a.assert_called_with(1, 2, 3)
至
mock_reference.return_value.method_a.assert_called_with(1, 2, 3)
内容总结
以上是互联网集市为您收集整理的python – 模拟类和断言方法调用全部内容,希望文章能够帮你解决python – 模拟类和断言方法调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。