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

Mad*_*di7 2 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()
Run Code Online (Sandbox Code Playgroud)

我有一个单元测试:

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)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我添加了"保存"功能,什么都不做,原因是因为没有自定义'保存'功能,我不断收到此错误:

[OrderTest]对象没有属性[保存]

如果对自定义"保存"功能有更好的解决方案,请告诉我.但是这种解决方案不适用于django内置的'get_status_display()'函数.没有解决方案,我一直遇到这个麻烦:

[OrderTest]对象没有属性[get_status_display]

我可以做些什么才能让我的工作变得我需要?

小智 5

如果要测试accept方法,只需创建一个新订单,如下所示:

 def test_accept(self):
    order = Order.objects.create(status=100)
    result = order.accept()
    expected = (200, 'Second')
    self.assertEqual(expected, result)
Run Code Online (Sandbox Code Playgroud)

您收到[OrderTest] object has no attribute [save]错误的原因是您将测试对象传递给accept方法(在" Order.accept(self)"中),因此在self.save()调用时,它实际上会查找save测试类的方法.

希望这可以帮助.