我有这两个型号:
class Transaction(models.Model):
gateway_reference = models.CharField(max_length=255, null=True, blank=True)
...
@property
def abc(self):
...
class Item(models.Model):
txn = models.ForeignKey('Transaction')
def refund(self):
Gateway.refund(self.txn)
在我的单元测试中:
def test_decline(self):
item = Item.objects.get(...)
with patch('app.models.Transaction.gateway_reference', new='invalid reference'):
item.refund()
但它抱怨Transaction class does not have the attribute 'gateway_reference'
注意: 我正在为模型类的属性使用类似的补丁,它工作正常,例如。
with patch('app.models.Transaction.abc', new='lalala')
答案 0 :(得分:0)
使用下面的行实例化模型时
item = Item.objects.get(...)
您已通过txn
属性创建了对交易模型的引用。因此,在实例化之后修补该命名空间中的类Transaction
为时已晚。
我会在item
实例上使用补丁对象。见https://docs.python.org/dev/library/unittest.mock.html#unittest.mock.patch.object