Чтение онлайн

на главную - закладки

Жанры

Шрифт:

}

public MembershipCreateStatus CreateUser(string userName,

string password, string email)

{

MembershipCreateStatus status;

_provider.CreateUser(userName, password,

email, null, null, true, null, out status);

return status;

}

public bool ChangePassword(string userName,

string oldPassword, string newPassword)

{

MembershipUser currentUser = _provider.GetUser(

userName, true);

return currentUser.ChangePassword(oldPassword, newPassword);

}

}

Выделение обертки над службами ASP.NET позволяет не только получить возможность простого тестирования, но и заменять реализацию в процессе развития приложения. Например, при замене стандартного провайдера Membership на собственную реализацию или изменение провайдера авторизации для поддержки сертификатов, или Windows-аутентификация. Однако в целях тестирования этот подход просто незаменим.

Во время работы веб-приложения, созданного из шаблона, используется стандартная фабрика контроллеров, не передающая дополнительных параметров конструктору класса Accountcontroller, в тестовом же окружении используется имитация — код классов, имитирующих бурную деятельность. Пример классов, реализующих подход имитации, приведен в листинге 8.4.

Листинг 8.4. Классы для имитации в условиях тестирования

public class MockFormsAuthenticationService :

IFormsAuthentication

{

public void SignIn(string userName,

bool createPersistentcookie) { }

public void SignOut { }

}

public class MockHttpContext : HttpContextBase

{

private IPrincipal _user;

public override IPrincipal User

{

get

{

if (_user == null)

{

_user = new MockPrincipal;

}

return _user;

}

set

{

_user = value;

}

}

}

Аналогично коду, приведенному в листинге 8.4, строятся остальные классы, используемые для тестирования. Основной принцип их создания состоит в том, чтобы развязать процесс тестирования с реальным функционалом — вместо работы с базами данных не делать ничего, либо возвращать стандартные значения, используемые для тестирования, и т. п.

Пример использования имитирующих классов в целях тестирования приведен в листинге 8.5. Процесс подготовки объектов выделен в отдельный метод GetAccountController .

Листинг 8.5. Несколько методов для тестирования AccountController

private static AccountController GetAccountController

{

IFormsAuthentication formsAuth = new

MockFormsAuthenticationService;

MembershipProvider membershipProvider = new MockMembershipProvider;

AccountMembershipService membershipService = new

AccountMembershipService(membershipProvider);

AccountController controller = new

AccountController(formsAuth, membershipService);

ControllerContext controllerContext = new

ControllerContext(new MockHttpContext,

new RouteData,

controller);

controller.ControllerContext = controllerContext;

return controller;

}

[Test]

public void RegisterPostReturnsViewIfPasswordIsNull

{

AccountController controller = GetAccountController;

ViewResult result = (ViewResult)controller.Register("username",

"email", null, null);

Assert.AreEqual(6, result.ViewData["PasswordLength"]);

Assert.AreEqual(

"You must specify a password of 6 or more characters.",

result.ViewData.ModelState["password"].Errors[0].ErrorMessage);

}

[Test]

public void

RegisterPostReturnsViewIfNewPasswordDoesNotMatchConfirmPassword

{

AccountController controller = GetAccountController;

ViewResult result = (ViewResult)controller.Register("username",

"email", "password", "password2");

Assert.AreEqual (6, result.ViewData["PassworcLLength"] );

Assert.AreEqual(

"The new password and confirmation password do not match.",

result.ViewData.ModelState["_FORM"].Errors[0].ErrorMessage);

}

[Test]

public void RegisterPostReturnsViewIfPasswordIsTooShort

{

AccountController controller = GetAccountController;

ViewResult result = (ViewResult)controller.Register("username",

"email", "12345", "12345");

Assert.AreEqual(6, result.ViewData["PasswordLength"]);

Assert.AreEqual(

"You must specify a password of 6 or more characters.",

result.ViewData.ModelState["password"].Errors[0].ErrorMessage);

}

[Test]

public void RegisterPostReturnsViewIfRegistrationFails

{

AccountController controller = GetAccountController;

ViewResult result = (ViewResult)controller.Register("someUser",

"DuplicateUserName" /* error */, "badPass", "badPass");

Assert.AreEqual(6, result.ViewData["PasswordLength"]);

Поделиться:
Популярные книги

Образ врага

Дашкова Полина Викторовна
Детективы:
триллеры
прочие детективы
8.32
рейтинг книги
Образ врага

Я все еще барон

Дрейк Сириус
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Я все еще барон

Темный двойник Корсакова. Оккультный детектив

Евдокимов Игорь
2. Тайный архив Корсакова
Детективы:
исторические детективы
крутой детектив
5.00
рейтинг книги
Темный двойник Корсакова. Оккультный детектив

Баоларг

Кораблев Родион
12. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Баоларг

Постмодернизм

Грицанов Александр Алексеевич
Научно-образовательная:
философия
6.25
рейтинг книги
Постмодернизм

Лекарь Империи 7

Карелин Сергей Витальевич
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 7

Ранчо

Стил Даниэла
Любовные романы:
современные любовные романы
7.71
рейтинг книги
Ранчо

МИФОуказания

Асприн Роберт Линн
3. Мифология
Фантастика:
юмористическая фантастика
9.33
рейтинг книги
МИФОуказания

Инженер Петра Великого 3

Гросов Виктор
3. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого 3

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Наномашины, наследник! Том 9

Новиков Николай Васильевич
9. Первый среди карапузов
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наномашины, наследник! Том 9

Технология XSLT

Валиков Алексей Н.
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
Технология XSLT