Python AttributeError:“类”对象没有属性“名称”-SetUpClass

Posted

技术标签:

【中文标题】Python AttributeError:“类”对象没有属性“名称”-SetUpClass【英文标题】:Python AttributeError: 'Class' object has no attribute 'name' - SetUpClass 【发布时间】:2017-05-30 15:48:09 【问题描述】:

我正在为 Django 应用程序中的模型编写测试,但无法让它们运行。我已经尝试了所有我能想到的来解决和搜索,但找不到解决方案。

我在运行测试时收到的错误是AttributeError: 'UserModelTest' object has no attribute 'firstUser',这表明我没有正确定义 firstUser。

这里是相关的代码。

tests.py

from django.test import TestCase
from .models import ContactForm
from datetime import datetime, timedelta

class UserModelTest(TestCase):

    @classmethod
    def setUpClass(cls):
        cls.firstUser = ContactForm(
            email="first@user.com",
            name="first",
            timestamp=datetime.today() + timedelta(days=2)
        )
        cls.firstUser.save()

    def test_contactform_str_returns_email(self):
        self.assertEqual("first@user.com", str(self.firstUser))

models.py

from django.db import models
import datetime

class ContactForm(models.Model):
    name = models.CharField(max_length=150)
    email = models.EmailField(max_length=250)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email

    class Meta:
        ordering = ['-timestamp']

我正在使用 Python 3.5 版和 Django 1.10 版。

【问题讨论】:

为什么要大写 SetUpClass? 请修正你的缩进。 另外你的问题是你将用户分配给类本身,而不是类的任何实例。 (1) 在问题正文中显示回溯 (2) 错误消息与问题标题不同 已解决:对于 Django 1.10,我应该使用 setUpTestData 而不是 setUpClasssetUpClass 用在我一直在使用的以前版本的 Django 中。我没有意识到这已被弃用。 Django 文档涵盖了 setUpTestData here.。感谢您的回复。 【参考方案1】:

setUpClass 已被 Django 弃用(我相信从 1.8 开始)。为了现在设置课程,我需要使用setUpTestData。其余代码仍然有效。然后setUpTestData 在类中的所有测试方法之前只运行一次(而不是在每次测试之前运行一次)。

即代码应该是:

class UserModelTest(TestCase):

    @classmethod
    def setUpTestData(cls):
        cls.firstUser = ContactForm(
            email="first@user.com",
            name="first",
            timestamp=datetime.today() + timedelta(days=2)
        )
        cls.firstUser.save()

    def test_contactform_str_returns_email(self):
        self.assertEqual("first@user.com", str(self.firstUser))

更多关于 setUpTestData 的信息可以在here找到。

【讨论】:

以上是关于Python AttributeError:“类”对象没有属性“名称”-SetUpClass的主要内容,如果未能解决你的问题,请参考以下文章

泡菜模块出错。 AttributeError:类没有属性“__new__”

Python multiprocessing.Pool:AttributeError

python sklearn pipiline fit:“AttributeError:未找到下限”

AttributeError : 类实例没有 __call__ 方法

[Bug]Python3.x AttributeError: libtest.so: undefined symbol: fact

AttributeError: module 're' has no attribute 'search'