该测试给我带来了不寻常的问题:
我的测试略有简化:
def test_credit_create_view(self):
""" Can we create cards? """
card_data = {'creditcard_data': 'blah blah blah'}
with patch('apps.users.forms.CustomerAccount.psigate') as psigate:
info = MagicMock()
info.CardInfo.SerialNo = 42
create = MagicMock(return_value=info)
psigate.credit.return_value = create
self.client.post('/make-creditcard-now', card_data)
我尝试模拟的呼叫如下所示:
psigate.credit().create().CardInfo.SerialNo
在测试中,该调用仅返回MagicMock对象。
如果仅查看该调用中的最后三个节点,则会得到正确的结果:
create().CardInfo.SerialNo
返回42
为什么对psigate.credit()。create()。CardInfo.SerialNo'的完整调用不会返回42?
最佳答案
您正在将psigate.credit的返回值设置为create,这意味着psigate.credit()是您模拟的“ create”,而不是psigate.credit()。create。如果您改为调用psigate.credit()(),这将按预期工作。
调用psigate.credit()。create()时,您是在动态创建一个新的MagicMock对象,而不是调用您定义的对象。
关于python - 使用Python Mock修补API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21886143/