2010-05-10 3 views
3

Это простая структура в моем проекте:Как я могу сделать такой типичный unittest?

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 

Я хочу сделать UnitTest, который может проверить страницу 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') 

Проблема заключается в том, что мой проект включать в себя аутентификации мод, это заставит пользователя unlogin перенаправление на страницу login.html, когда они посещают noteshow.html.

Так что, когда я бегу мой UnitTest, в Баш это поднять провал, что response.status_code всегда 302 вместо 200.

Хорошо хоть через этот результат можно проверить аутентификации мод работает хорошо , это не то, что я хочу.

ОК, вопрос в том, как я могу сделать еще один unittest, чтобы проверить мои заметки. Используется шаблон или нет?

Спасибо за все.

версия Джанго: 1.1.1

питон версия: 2.6.4

Использование Eclipse для MAC OS

ответ

6

Только вход пользователя для каждого теста. Лучший способ сделать это - использовать метод 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') 

Надеется, что это помогает.

+0

Большое спасибо. Это действительно полезно! –