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

标签 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] 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/

相关文章:

python - python中有matlab中digits()和vpa()函数的对应函数吗?

python - 将数据写入调整大小的 hdf5 数据集会以令人惊讶的方式失败

python - 如何在 Django 中更新用户配置文件

javascript - 函数内 Restangular 的 jasmine 测试用例

java - Quarkas - 无法构建 - 由 : java. lang.RuntimeException 引起:尝试混合 @NativeImageTest

python - 无法使用 Pytest 断言列表的长度

python - 在 Python pandas 中,如何存储 value_counts 的列名称?

python - 如何将 sqlite 3.8.2 升级到 >= 3.8.3

Django - UploadedFile.content_type 检查上传文件的标题还是仅检查扩展名?

python - 通过引用而不是通过名称字符串修补对象?