Django的:类对象没有标准功能
的属性我有一个模型:Django的:类对象没有标准功能
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
方法。
希望这会有所帮助。
非常感谢!但是我不明白一件事,如果我必须真正地创建用于测试的对象,嘲笑的目的是什么?例如,我尝试这样做:order = Mock(spec = Order),但它不起作用,但是:order = Order.objects.create(status = 100)完美地工作。如果我必须通过'Model.objects.create'为每个单元测试创建新对象,为什么要使用嘲讽? – Madi7
@ Madi7 https://stackoverflow.com/questions/3622455/what-is-the-purpose-of-mock-objects –
应该自我传递给accept函数吗? Oder.accept()? –
在这种情况下,我得到:“TypeError:accept()缺少1所需的位置参数:'self'” – Madi7