Python模拟不断言调用

时间:2014-10-13 15:30:43

标签: python unit-testing mocking python-mock

我使用模拟库修补程序中的一个类,该程序连接到外部资源并发送一个文档。

这样的结构像这样......

code.py

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

test.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)

第一个assert_called_with工作正常,但是对模拟类的方法的调用 不通过。我已经尝试过使用patch.object作为装饰器也没有运气。

1 个答案:

答案 0 :(得分:3)

在第一次调用的返回值上调用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)