Python Mock 不断言调用

标签 python unit-testing mocking python-mock

我正在使用模拟库来修补连接到外部资源并发送字典的程序中的类。

结构有点像这样......

代码.py

def make_connection():
    connection = OriginalClass(host, port)
    connection.connect()
    connection.send(param)
    connection.close()

测试.py

@mock.path('code.OriginalClass')
def test_connection(self, mocked_conn):
    code.make_connection()
    mocked_conn.assert_called_with(host, port)
    mocked_conn.connect.assert_called_once()
    mocked_conn.send.assert_called_with(param)

第一个断言_调用_with 工作完美,但是对模拟类的方法的调用 不要通过。我尝试过使用 patch.object 作为装饰器,但没有成功。

最佳答案

在第一次调用的返回值上调用connect()send()方法;相应地调整您的测试:

mocked_conn.return_value.connect.assert_called_once()
mocked_conn.return_value.send.assert_called_with(param)

我通常首先存储对“实例”的引用:

@mock.path('code.OriginalClass')
def test_connection(self, mocked_conn):
    code.make_connection()
    mocked_conn.assert_called_with(host, port)
    mocked_instance = mocked_conn.return_value
    mocked_instance.connect.assert_called_once()
    mocked_instance.send.assert_called_with(param)

关于Python Mock 不断言调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343600/

相关文章:

java - Mockito 可以验证参数是否具有某些属性/字段?

python - 在 TestCase.setUp() 中模拟

unit-testing - 流服务中的 Webmethods 模拟

python - 如何将时差限制在同一天?

python - tkinter TreeView : get selected item values

unit-testing - 从单元测试调用插件功能

unit-testing - XSB Prolog中的单元测试?

python - 无法从 QWidget 更改 QSlider 的值

python - 将 Selenium 函数存储到变量中与不存储它有区别吗?

javascript - 如何对 Polyfilled WebComponents 自定义元素进行单元测试