2

Приложение ASP.Net в Visual Studio 2008Единичный тест - учетная запись пользователя

Я создаю модульные тесты для проверки действительных логинов для веб-приложения. У меня есть метод bool Authenticate (User, Pass). Правильно работают нулевой регистр и неверные тесты паролей.

Мой вопрос заключается в том, как проверить действительный логин. У меня есть учетные записи, которые действительны для веб-приложения, но я чувствую, что жесткое кодирование в имени пользователя и пароле, вероятно, не лучшее решение.

Я думаю, что я, возможно, придется: создать тестовый пользователь предоставить пользователю доступ к веб-приложение запустить мои тесты удалить TestUser

Есть ли лучший подход?

ответ

5

Прежде всего, если вы разговариваете с настоящим веб-приложением или с реальной базой данных, вы не выполняете модульное тестирование, вы выполняете интеграционное тестирование.

Что именно вы пытаетесь проверить здесь?

Это:

  • переходящая в неправильном имени пользователя и/или пароль не войти пользователя?
  • Заполните корректное имя пользователя и/или пароль, чтобы войти в систему.
  • Что такое учетная запись в Active Directory? Что это докажет? Что ваш ИТ-администратор сделал свою работу?

Помните, что вы не должны утверждать факты, вы должны утверждать поведение. Поэтому вместо проверки того, что определенная учетная запись находится в AD, убедитесь, что при правильном имени пользователя и пароле ваш код ведет себя как ожидалось, а при неправильном имени пользователя или пароле он также ведет себя так, как ожидалось, и вы должны попытаться делайте это без привлечения Active Directory.

В первых двух случаях выше, есть несколько кусков кода, участвующих:

  • код, который принимает имя пользователя и пароль
  • код, который пытается найти существующую учетную запись с таким именем и паролем
  • код, который хранит «теперь вошли в» самом деле
  • код, который соответствует «Неправильное имя пользователя или пароль» ошибка

Итак, вы проверяете, работает ли ваша база данных? Или ваш код, который проверяет правильность работы?

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

Обратите внимание, что в какой-то момент вам необходимо выполнить фактический интеграционный тест, так как вы хотите, чтобы ваш код, запрашивающий Active Directory, работал правильно, но вы должны проверить как можно больше поведения без привлечения Active Directory, это сделают ваши тесты более читабельными (все в одном месте), более ремонтопригодными (нет необходимости входить в Active Directory для создания новых тестовых данных) и более надежны (не интересно, когда он терпит неудачу, если кто-то перепутал Active Directory, сеть был flaky, пользователь был удален, обновление программного обеспечения так реагирует по-разному и т. д.).

Я видел слишком много «единичных тестов» из-за внешних зависимостей, и мой совет состоит в том, чтобы попытаться свести к минимуму их как можно больше, в идеале не имея вообще никаких. Для ваших модульных тестов что есть.

+0

Нет данных для этого конкретного метода. Этот метод вызывается веб-формой, которая берет имя пользователя и пароль. Метод проверяет это на активном каталоге, проверяя группы в AD и удостоверяя, что пользователь находится в определенной группе, но не в других группах. Я думаю, что мне нужно создавать пользователей «на лету», добавлять их в последовательность групп, которые должны проходить (и терпеть неудачу), а затем запускать тесты. – Rob

+0

Как я уже сказал, вы не должны использовать свою установку Active Directory для этого. Вместо этого подделайте поставщика данных, который сообщает вам, в каких группах находятся люди, и утверждайте, что ваша программа ведет себя правильно. Если вы разговариваете с сервером Active Directory, вы выполняете интеграционное тестирование, а не модульное тестирование. –

+0

все в порядке .. что было бы лучшим способом подделать поставщика данных? – Rob

0

Не можете ли вы использовать исходный источник данных вместо фактического, из которого извлекаются фактические имена пользователей и пароли?

Это мой рекомендуемый подход, поскольку то, что вы хотите протестировать, - это процедура аутентификации, а не данные.

+0

Проблема в том, что учетные записи находятся в Active Directory. Я не упомянул, что в вопросе D'oh – Rob

+0

Может быть, локальный сервер LDAP тестирования? – queen3

Смежные вопросы