Django:类对象没有标准函数的属性

时间:2017-10-19 04:20:48

标签: python django unit-testing

我有一个模特:

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]

我可以做些什么来使我的工作成为可能?

1 个答案:

答案 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方法。

希望这有帮助。