我该怎么做这样一个典型的单元测试?
问题描述:
这是在我的项目一个简单的结构:我该怎么做这样一个典型的单元测试?
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页面propeyly或不工作。
代码:
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国防部,它会迫使unlogin用户重定向到login.html的页面,当他们参观noteshow.html。
所以,当我跑我的单元测试,在Bash它引发故障的response.status_code始终是302而不是200
虽然所有权利,通过这个结果我可以检查AUTH国防部运行良好,它不像我想要的那样。
好的,问题是我如何使另一个单元测试来检查我的noteshow.template是否被使用?
谢谢大家。
Django的版本:1.1.1
Python版本:2.6.4
使用Eclipse进行MAC OS
答
只需登录每个测试的用户。最好的方法是使用创建客户端,创建用户,然后将用户登录到的setUp()
方法。还可以使用tearDown()
方法执行相反操作(注销用户并删除用户)。
方法setUp()
和tearDown()
自动为该组测试中的每个测试运行。
这将是这个样子:
class Note(TestCase):
def setUp(self):
self.client = Client()
self.new_user = User.objects.create_user('blah', '[email protected]', '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')
希望这有助于。
非常感谢。这真的很有帮助! – 2010-05-17 01:04:27