假设我有一个名为 Client 的类,它创建 Request 类的对象并将其传递给 Connection 对象的方法:
class Client(object):
def __init__(self, connection):
self._conn = connection
def sendText(plaintext):
self._conn.send(Request(0, plaintext))
我想断言传递给 Connection.send 方法的对象以检查其属性。我从创建一个模拟的 Connection 类开始:
conn = Mock()
client = Client(conn)
client.sendText('some message')
然后我想要类似的东西:
conn.send.assert_called_with(
(Request,
{'type': 0, 'text': 'some message'})
)
其中 'type' 和 'text' 是 Request 的属性。有没有办法在 python 的模拟中做到这一点?我在文档中找到的只是简单的数据示例。我可以用 mock.patch 装饰器通过用断言对象字段的方法替换原始的“发送”方法来完成它:
def patchedSend(self, req):
assert req.Type == 0
with mock.patch.object(Connection, 'send', TestClient.patchedSend):
...
但在这种情况下,我必须为每个方法检查定义一个单独的模拟函数,并且我无法检查(没有额外的编码)该函数是否已被调用。