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

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

Жанры

Шрифт:

}

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"]);

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

Полное собрание рассказов

Воннегут Курт
Проза:
современная проза
5.00
рейтинг книги
Полное собрание рассказов

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Жизнь способ употребления

Перек Жорж
Проза:
современная проза
5.00
рейтинг книги
Жизнь способ употребления

Ленин (Глава 1)

Волкогонов Дмитрий Антонович
Научно-образовательная:
история
5.20
рейтинг книги
Ленин (Глава 1)

Том 3. Советский и дореволюционный театр

Луначарский Анатолий Васильевич
3. Собрание сочинений в восьми томах
Документальная литература:
критика
5.00
рейтинг книги
Том 3. Советский и дореволюционный театр

Миры Империума

Лаумер Кейт Джон
Шедевры фантастики
Фантастика:
научная фантастика
альтернативная история
8.12
рейтинг книги
Миры Империума

Том 4. Повести и рассказы, статьи 1844-1854

Тургенев Иван Сергеевич
4. Собрание сочинений в двенадцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 4. Повести и рассказы, статьи 1844-1854

Звезды над Самаркандом

Бородин Сергей Петрович
Проза:
историческая проза
7.50
рейтинг книги
Звезды над Самаркандом

Я до сих пор не князь. Книга XVI

Дрейк Сириус
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI

Бешеный прапорщик. Части 1-9

Зурков Дмитрий
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.95
рейтинг книги
Бешеный прапорщик. Части 1-9

Том 1. Русская литература

Луначарский Анатолий Васильевич
1. Собрание сочинений в восьми томах
Документальная литература:
критика
5.00
рейтинг книги
Том 1. Русская литература

Лютица

Васильев Виктор Дмитриевич
Приключения:
исторические приключения
5.00
рейтинг книги
Лютица

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

When the Mirror Cracks

OcSola
Драматургия:
драма
5.00
рейтинг книги
When the Mirror Cracks