Как проверить дубликаты адресов электронной почты в .NET MVC - PullRequest
1 голос
/ 22 октября 2009

Я добавил функциональность в Контроллер учетных записей -> Регистрация ActionValidateRegistation, чтобы проверить наличие пробелов в форме регистрации пользователя. Теперь я хочу добавить ошибку в форму, если введенный пользователем адрес электронной почты уже находится в системе. Я добавил функцию проверки дубликата адреса электронной почты в конце функции ValidateRegistration.

Я использую linq для запроса базы данных, чтобы создать список пользователей и проверить электронную почту, если она уже была использована, которая хорошо работает во время выполнения. Я создал базовый визуальный тест с проверкой объекта пользователя (имя пользователя, пароль и т. Д.) На наличие дублированного адреса электронной почты во время действия регистрации. Как избежать того, чтобы ValidateRegistration запрашивал базу данных и создавал список пользователей (что я и хочу во время выполнения), а вместо этого предоставлял ValidateRegistration поддельным пользовательским объектам во время модульного тестирования?

Пример кода: Аккаунты Contoller

    public ActionResult Register(string username... string password...)
    {

            //Call the ValidateRegistration(string username... string password...);

            //Add user if ValidateRegistration checks have passed
    }

public ValidateRegistration (строка имени пользователя ... строка пароля ...) { // Проверяем имя пользователя, если пусто // ModelState.AddModelError (имя пользователя пусто)

// проверка длины пароля // ModelState.AddModelError (пароль слишком короткое сообщение)

// List lstUsers = GetUsers (); // проверяем, используется ли адрес электронной почты // ModelState.AddModelError (электронная почта уже используется)

// Как мне проверить блок проверки вышеуказанного адреса электронной почты?

}

SampleCode: тесты единиц измерения

    public void RegisterPostReturnsViewIfFirstnameNotSpecified()
    {
        // Arrange
        AccountController controller = GetAccountController();

        // Act
        ViewResult result = (ViewResult)controller.Register(string username... string password...)

        // Assert
        Assert.AreEqual(6, result.ViewData["PasswordLength"]);
        Assert.AreEqual(See if error message is equal);
    }

1 Ответ

0 голосов
/ 22 октября 2009

Вам следует заглянуть в «Внедрение зависимостей» или «Инверсия контроля». Существует ряд популярных IoC-контейнеров, которые позволяют вам настраивать, какие типы создаются во время выполнения, когда вы запрашиваете новый объект (уровень доступа к базе данных [DAL] в вашем случае).

При использовании DI основная предпосылка заключается в том, что вы говорите своему контроллеру «использовать этот DAL», а не контроллеру, который решает, какой DAL использовать. С IoC ваши модульные тесты определяют, какие классы создаются, когда кто-то запрашивает DAL, а ваш контроллер запрашивает контейнер для DAL.

Очень хорошей отправной точкой для этого является статья Мартина Фаулера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...