Python AttributeError:'Class'对象没有属性'name' - SetUpClass

时间:2017-01-15 19:57:18

标签: python django testing model

我正在为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。

1 个答案:

答案 0 :(得分:0)

Django已经弃用

setUpClass(我相信自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