我正在尝试编写一个使用通过注释添加的属性的测试用例,但我的测试用例无法使用它,任何想法我该如何解决?感谢
我模特中的属性:
@property
def amount_net(self):
net_sum = self.amount_net_sum
return Decimal(round(net_sum, 2)) if net_sum else Decimal("0.00")
self.amount_net_sum
来自自定义经理:
class InvoiceManager(models.Manager):
def get_queryset(self):
qs = super().get_queryset()
qs = qs.annotate(amount_net_sum=Sum('line_items__amount_net'))
return qs
在测试用例中:
self.invoice_test1 = Invoice.objects.create(
state=InvoiceStatus.NEW, language='en',
type=InvoiceType.INVOICE,
created=date(2015, 1, 30),
recipient=profile,
)
和
self.assertEqual(self.invoice_test1.amount_net, self.line_item_sum_net,
'Checks if the invoice calculated and expected values are same')
错误:
AttributeError: 'Invoice' object has no attribute 'amount_net_sum'
答案 0 :(得分:1)
使用您的代码创建了对象self.invoice_test1
,它没有从数据库中获取。因此,未使用您的自定义管理器,并且未对该对象进行注释。
如果从数据库中重新获取对象,则应对其进行注释。然后,您可以在assertEqual
检查中使用重新获取的对象。
self.invoice_test1 = Invoice.objects.get(pk=self.invoice_test1.pk)
当对象没有amount_net
属性时,你应该改变amount_net_sum
属性来处理这种情况,而不是让它引发AttributeError
。