我对Django测试软件很陌生。就目前而言,我正在尝试为与给定形式连接的验证器创建测试类(清除输入数据的过程):
forms.py:
class SignupForm(forms.Form):
email = forms.EmailField(max_length=200)
first_name = forms.CharField(max_length=200)
last_name = forms.CharField(max_length=200)
company_name = forms.CharField(max_length=200)
password1 = forms.CharField(max_length=200)
password2 = forms.CharField(max_length=200)
def clean(self):
cleaned_data = self.cleaned_data
cleaned_username_obtained = cleaned_data.get('username')
if(cleaned_username_obtained != None):
username_obtained = cleaned_username_obtained.lower()
else:
raise ValidationError('Username is empty!')
cleaned_email_address = cleaned_data.get('email')
cleaned_password1 = cleaned_data.get('password1')
cleaned_password2 = cleaned_data.get('password2')
cleaned_first_name = cleaned_data.get('first_name')
cleaned_last_name = cleaned_data.get('last_name')
cleaned_company_name = cleaned_data.get('company_name')
if username_obtained != None:
if((User.objects.filter(username=username_obtained)).count() > 0):
self._errors['username'] = [u'Username is already in use']
elif((ModelOfAdvertisementClient.objects.filter(email_address=cleaned_email_address)).count() > 0):
self._errors['email'] = [u'Email is already in use']
elif(len(cleaned_password1) == 0):
self._errors['password1'] = [u'Password input box is empty']
elif(cleaned_password2 != cleaned_password1):
self._errors['password2'] = [u'Inserted passwords are different!']
return cleaned_data
test_forms.py:
class SignupFormTest(TestCase):
@classmethod
def test_correct_values(self):
form = SignupForm({
'username': 'testUsername',
'email': 'mark12@gmail.com',
'first_name': 'Karl',
'last_name': 'Smith',
'company_name': 'HiTech Inc.',
'password1': 'test123',
'password2': 'test123'
}
)
print(str(form.is_valid()))
self.assertFalse(form.is_valid())
不幸的是,每次我启动上面编写的代码时,它都会出现以下错误消息:
self.assertFalse(form.is_valid())
TypeError: assertFalse() missing 1 required positional argument: 'expr'
由于事实,
form.is_valid()
返回“ False”,从字面上我不知道此断言有什么问题
答案 0 :(得分:1)
测试方法不应具有@classmethod
装饰器。这些是针对全班级设置/拆卸代码的。对于使用@classmethod
装饰器的情况,您正在静默地调用一个需要两个参数的未绑定assertFalse()
方法:一个TestCase实例和一个布尔表达式。