2012-03-15 3 views
0

Я начал писать некоторые тесты для своего приложения Django, и я не уверен, как лучше всего структурировать код.Тесты Django зависят от других страниц/поведения

Скажите, что у меня есть страница регистрации и страница для входа в систему только для пользователей. Мой первый план должен был иметь более ранний метод выполнения регистра и последующего использования метода, который логин, чтобы проверить страницу:

def test_register_page(self): 
    //send request to register page and check user has been registered correctly 
def test_restricted_page(self): 
    c = Client(); 
    c.login("someUser","pass"); 
    c.post("/someRestrictedPage/"); 
    //Test response 

Однако это означает, что теперь один из моих тестов полагаться на другой.
Альтернативы, которые я вижу, вызывают регистр в setUp(), но это все равно означает, что тест с ограниченной страницей зависит от работы страницы регистрации.

Я мог бы попытаться создать нового пользователя вручную в настройках, которые мне также не нравятся, потому что это не тестирование пользователя, созданного системой.

Что такое обычный образец для проверки такого рода ситуации?

ответ

1

Вы пытаетесь объединить множество разных функций в одном тестовом случае. Чистый дизайн будет имеющий один тестовый случай

  • для регистрации пользователя и
  • один для просмотра.

Наличие их зависимости друг от друга приведет к множеству зависимостей между ними - и - если тест не удастся, ошибка будет еще сложнее отлаживать. Успех регистрационного теста должен определяться путем правильного создания экземпляра пользователя (так что проверьте необходимые атрибуты и т. Д. Пользователя), а не через возможность входа на определенную страницу. Поэтому вам нужно будет создать «правильный» экземпляр пользователя для примера проверки. Это может показаться немного более сложным, чем необходимо, но это облегчит будущее обслуживание. То, что вы пытаетесь сделать, это еще что-то вроде теста интеграции, которая проверяет всю систему , но перед тем, что вы должны разделить вашу систему функциональных единиц и сделать блок тестирует на этой единицы! Меньшие и четко определенные одиночные тесты, тем легче будет их обслуживание и отладка.

+1

Извините, если я не был чист. Предполагается, что это два отдельных модульных теста, один из которых проверяет ограничение доступа к зарегистрированным пользователям, а другой - для проверки регистрации пользователей. Похоже, setup() должен вручную создавать пользователя для тестирования. Спасибо за вашу помощь. – Jim

+0

@Jim: Если вы интересны в этой теме, в Django есть приятные тесты для адресации разговоров, особенно показывающие некоторые удобные методы для создания объектов только для теста: https://www.youtube.com/watch?v=ickNQcNXiS4&context = C44039cbADvjVQa1PpcFPQunG_ULh73WnDAl7g7Y8JDYIDmeEZjYQ = –