ModelForm 和单元测试的奇怪问题:TypeError: getattr():

我不知道这里会发生什么:


模型.py


class Sound(models.Model):

    SEX_CHOICES = (

            ('M', 'Male'),

            ('F', 'Female')

    )

    phrase1 = models.CharField(max_length=300)

    phrase2 = models.CharField(max_length=300)

    language = models.CharField(max_length=50)

    num_words = models.PositiveSmallIntegerField(verbose_name="number of words")

    num_syllables = models.PositiveSmallIntegerField(verbose_name="number of syllables")

    sex = models.CharField(max_length=1, choices=SEX_CHOICES)

    voice = models.BooleanField(verbose_name="synthetic voice")

    speaker_name = models.CharField(max_length=50)

    sound_hash = models.CharField(max_length=40, primary_key=True, editable=False)

    key = models.CharField(max_length=200, editable=False, default="", null=True, help_text="Amazon S3 key")

表格.py


from django import forms

class LessonSoundForm(forms.ModelForm):

    class Meta:

        model = Sound

        fields = ["phrase1", "phrase2", "num_words", "num_syllables"]

测试.py


from django.test import TestCase

from forms import LessonSoundForm

class LessonSoundForm(TestCase):

    def setUp(self):

        self.sound_data = {

                "phrase1": "Poop",

                "phrase2": "Knuckle",

                "num_words": 1,

                "num_syllables": 1

        }


    def test_lesson_sound_form_validates_with_good_data(self):

        form = LessonSoundForm(data=self.sound_data)

        self.assertTrue(form.is_valid())

这看起来非常简单,所有其他测试都使用ModelForm. 但是,我收到此错误:


line 20, in test_lesson_sound_form_validates_with_good_data

        form = LessonSoundForm(data=self.sound_data)

    TypeError: __init__() got an unexpected keyword argument 'data'

如果我在没有data参数的情况下运行它,我会得到:


    form = LessonSoundForm(self.sound_data)

  File "/usr/lib/python3.6/unittest/case.py", line 397, in __init__

    testMethod = getattr(self, methodName)

TypeError: getattr(): attribute name must be string

这似乎是一个非常基本的案例,我不知道会出现什么问题。我认为这只是一天的结束,我错过了一些愚蠢的事情。


慕娘9325324
浏览 214回答 1
1回答

RISEBY

from forms import LessonSoundForm                  ^^^^^^^^^^^^^^^class LessonSoundForm(TestCase):      ^^^^^^^^^^^^^^^LessonSoundForm由于相同的 name ,当您为测试用例定义新类时,您正在覆盖。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python