【发布时间】:2021-11-29 14:36:24
【问题描述】:
我想在 django 项目中测试注册视图,
所以我构建了一些假测试用例(self.correct_samples)
注册成功后会跳转到首页,也就是状态码应该是302。
from django.test import TestCase
from django.urls.base import reverse
class RegisterTests(TestCase):
def setUp(self):
url = reverse('account:register')
self.response = self.client.get(url)
self.correct_samples = (
('testuser1@email.com', 'testuser', 'test112233', 'test112233'),
('fakeuser@email.com', 'fake123', 'fakeuser111', 'fakeuser111'),
('correct@email.com', 'Jack', 'myfavorite', 'myfavorite'),
('failemail', 'Jack', 'myfavorite', 'myfavorite'), # fail for purpose
)
def test_register_form(self):
for test_case in self.correct_samples:
email, username, password1, password2 = test_case
self.response = self.client.post(reverse('account:register'), data={
'email': email,
'username': username,
'password1': password1,
'password2': password2,
})
self.assertEqual(self.response.status_code, 302)
self.assertRedirects(
self.response, expected_url='/', status_code=302, target_status_code=200)
self.correct_samples 中的第四个数据('failemail', 'Jack', 'myfavorite', 'myfavorite') 应该是失败案例。
但在python manage.py test 之后。它通过了。
(env) C:\Users\User\myblog>python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
C:\Users\User\myblog\env\lib\site-packages\whitenoise\base.py:115: UserWarning: No directory at: C:\Users\User\myblog\staticfiles\
warnings.warn(u"No directory at: {}".format(root))
.
----------------------------------------------------------------------
Ran 1 test in 0.195s
OK
Destroying test database for alias 'default'...
棘手的事情来了,
将顺序从第四切换到第一后失败。
from django.test import TestCase
from django.urls.base import reverse
class RegisterTests(TestCase):
def setUp(self):
...
self.correct_samples = (
('failemail', 'Jack', 'myfavorite', 'myfavorite'), # fail for purpose
('testuser1@email.com', 'testuser', 'test112233', 'test112233'),
('fakeuser@email.com', 'fake123', 'fakeuser111', 'fakeuser111'),
('correct@email.com', 'Jack', 'myfavorite', 'myfavorite'),
)
def test_register_form(self):
...
结果:
(env) C:\Users\User\myblog>python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
C:\Users\User\myblog\env\lib\site-packages\whitenoise\base.py:115: UserWarning: No directory at: C:\Users\User\myblog\staticfiles\
warnings.warn(u"No directory at: {}".format(root))
F
======================================================================
FAIL: test_register_form (account.tests.RegisterTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\User\myblog\account\tests.py", line 34, in test_register_form
self.assertEqual(self.response.status_code, 302)
AssertionError: 200 != 302
----------------------------------------------------------------------
Ran 1 test in 0.026s
FAILED (failures=1)
Destroying test database for alias 'default'...
为什么会这样?
我已经搜索过相关的关键字,例如unittest in forloop、multiple testcases in forloop。
但它似乎没有答案,或者可能通过其他关键字搜索?
或者我错过或误解了什么?
感谢您的帮助。
【问题讨论】:
标签: django unit-testing django-views django-testing django-tests