我有一个模型:
class Order(models.Model):
STATUS_CHOICES = (
(100, 'First'),
(200, 'Second'),
)
status = models.IntegerField('Status', choices=STATUS_CHOICES)
def accept(self):
self.status = 200
self.save()
return self.status, self.get_status_display()
我有一个单元测试:
class CustomTestCase(TestCase):
@classmethod
def setUp(self):
pass
@classmethod
def save(self):
pass
class OrderTest(CustomTestCase):
def test_accept(self):
result = Order.accept(self)
expected = (200, 'Second')
self.assertEqual(expected, result)
如您所见,我添加了不执行任何操作的“保存”功能,其原因是因为如果没有自定义“保存”功能,我会不断收到此错误:
[OrderTest] object has no attribute [save]
如果自定义“保存”功能有更好的解决方案,请告诉我。但这种解决方案不适用于 django 内置的“get_status_display()”函数。如果没有解决方案,我就会不断遇到这个麻烦:
[OrderTest] object has no attribute [get_status_display]
我该怎么做才能使这项工作满足我的需要?
最佳答案
如果您想测试 accept
方法,只需创建一个新订单,如下所示:
def test_accept(self):
order = Order.objects.create(status=100)
result = order.accept()
expected = (200, 'Second')
self.assertEqual(expected, result)
您收到 [OrderTest] object has no attribute [save]
错误的原因是您将测试对象传递到 accept
方法中(在“ Order.accept(self)
"),因此当调用self.save()
时,它实际上会查找测试类的save
方法。
希望这有帮助。
关于python - Django:类对象没有标准函数的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46822797/