我有一个模特:
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]对象没有属性[save]
如果对自定义“保存”功能有更好的解决方案,请告诉我。但是这种解决方案不适用于django内置的'get_status_display()'函数。没有解决方案,我一直遇到麻烦:
[OrderTest]对象没有属性[get_status_display]
我可以做些什么来使我的工作成为可能?
答案 0 :(得分:5)
如果您想测试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
方法。
希望这有帮助。