2

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

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

代码.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)

第一个 assert_call_with 工作得很好,但是对模拟类的方法的调用没有通过。我尝试过使用 patch.object 作为装饰器也没有运气。

4

1 回答 1

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)
于 2014-10-13T15:31:53.470 回答