这是我项目中的一个简单结构:
MyAPP---
note---
__init__.py
views.py
urls.py
test.py
models.py
auth--
...
template---
auth---
login.html
register.html
note---
noteshow.html
media---
css---
...
js---
...
settings.py
urls.py
__init__.py
manage.py
我想制作一个单元测试,可以测试noteshow页面是否正常工作。
代码:
from django.test import TestCase
class Note(TestCase):
def test_noteshow(self):
response = self.client.get('/note/')
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, '/note/noteshow.html')
问题是我的项目包含一个auth mod,它会强制unlogin用户在访问noteshow.html时重定向到login.html页面。
所以,当我运行我的unittest时,在bash中它会引发一个失败,即response.status_code总是302而不是200.
好吧,虽然通过这个结果,我可以检查auth mod运行良好,它不像我想要的那样。
好的,问题是我怎么能让另一个单元测试来检查我的noteshow.template是否被使用?
谢谢大家。
django版本:1.1.1
python版本:2.6.4
将Eclipse用于MAC OS
答案 0 :(得分:6)
只需为每个测试登录用户。执行此操作的最佳方法是使用setUp()
方法创建客户端,创建用户,然后将用户登录。还可以使用tearDown()
方法执行相反操作(注销用户和删除)用户)。
方法setUp()
和tearDown()
会自动为测试集中的每个测试运行。
它看起来像这样:
class Note(TestCase):
def setUp(self):
self.client = Client()
self.new_user = User.objects.create_user('blah', 'blah@blah.com', 'blah')
self.new_user.save()
self.client.login(username='blah', password='blah')
def tearDown(self):
self.client.logout()
self.new_user.delete()
def test_noteshow(self):
response = self.client.get('/note/')
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, '/note/noteshow.html')
希望这有帮助。