Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






MockHttpContext






Теперь создадим Mock-объекты для HttpContext в LessonProject.UnitTest:

 

MockHttpContext.cs в (/Mock/HttpContext.cs):

public class MockHttpContext: Mock< HttpContextBase>

{

[Inject]

public HttpCookieCollection Cookies { get; set; }

 

public MockHttpCachePolicy Cache { get; set; }

public MockHttpBrowserCapabilities Browser { get; set; }

public MockHttpSessionState SessionState { get; set; }

public MockHttpServerUtility ServerUtility { get; set; }

public MockHttpResponse Response { get; set; }

public MockHttpRequest Request { get; set; }

 

public MockHttpContext(MockBehavior mockBehavior = MockBehavior.Strict)

: this(null, mockBehavior)

{

}

 

public MockHttpContext(IAuthentication auth, MockBehavior mockBehavior = MockBehavior.Strict)

: base(mockBehavior)

{

//request

Browser = new MockHttpBrowserCapabilities(mockBehavior);

Browser.Setup(b => b.IsMobileDevice).Returns(false);

 

Request = new MockHttpRequest(mockBehavior);

Request.Setup(r => r.Cookies).Returns(Cookies);

Request.Setup(r => r.ValidateInput());

Request.Setup(r => r.UserAgent).Returns(" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11");

Request.Setup(r => r.Browser).Returns(Browser.Object);

this.Setup(p => p.Request).Returns(Request.Object);

 

//response

Cache = new MockHttpCachePolicy(MockBehavior.Loose);

 

Response = new MockHttpResponse(mockBehavior);

Response.Setup(r => r.Cookies).Returns(Cookies);

Response.Setup(r => r.Cache).Returns(Cache.Object);

this.Setup(p => p.Response).Returns(Response.Object);

 

//user

if (auth! = null)

{

this.Setup(p => p.User).Returns(() => auth.CurrentUser);

}

else

{

this.Setup(p => p.User).Returns(new UserProvider(" ", null));

}

 

//Session State

SessionState = new MockHttpSessionState();

this.Setup(p => p.Session).Returns(SessionState.Object);

 

//Server Utility

ServerUtility = new MockHttpServerUtility(mockBehavior);

this.Setup(p => p.Server).Returns(ServerUtility.Object);

 

//Items

var items = new ListDictionary();

this.Setup(p => p.Items).Returns(items);

}

}

 

Кроме этого создаем еще такие классы:

· MockHttpCachePolicy

· MockHttpBrowserCapabilities

· MockHttpSessionState

· MockHttpServerUtility

· MockHttpResponse

· MockHttpRequest

 

Все эти mock-объекты весьма тривиальны, кроме MockSessionState, где и хранится session-storage (/Mock/Http/MockHttpSessionState.cs):

public class MockHttpSessionState: Mock< HttpSessionStateBase>

{

Dictionary< string, object> sessionStorage;

 

 

public MockHttpSessionState(MockBehavior mockBehavior = MockBehavior.Strict)

: base(mockBehavior)

{

sessionStorage = new Dictionary< string, object> ();

this.Setup(p => p[It.IsAny< string> ()]).Returns((string index) => sessionStorage[index]);

this.Setup(p => p.Add(It.IsAny< string> (), It.IsAny< object> ())).Callback< string, object> ((name, obj) =>

{

if (! sessionStorage.ContainsKey(name))

{

sessionStorage.Add(name, obj);

}

else

{

sessionStorage[name] = obj;

}

});

}

}

Создаем FakeAuthCookieProvider.cs (/Fake/FakeAuthCookieProvider.cs):

 

public class FakeAuthCookieProvider: IAuthCookieProvider

{

[Inject]

public HttpCookieCollection Cookies { get; set; }

 

public HttpCookie GetCookie(string cookieName)

{

return Cookies.Get(cookieName);

}

 

public void SetCookie(HttpCookie cookie)

{

if (Cookies.Get(cookie.Name)! = null)

{

Cookies.Remove(cookie.Name);

}

Cookies.Add(cookie);

}

}

Фух! Инициализируем это в UnitTestSetupFixture.cs (/Setup/UnitTestSetupFixture.cs):

 

protected virtual void InitAuth(StandardKernel kernel)

{

kernel.Bind< HttpCookieCollection> ().To< HttpCookieCollection> ();

kernel.Bind< IAuthCookieProvider> ().To< FakeAuthCookieProvider> ().InSingletonScope();

kernel.Bind< IAuthentication> ().ToMethod< CustomAuthentication> (c =>

{

var auth = new CustomAuthentication();

auth.AuthCookieProvider = kernel.Get< IAuthCookieProvider> ();

return auth;

});

}

Заметим, что Bind происходит на SingletonScope(), т.е. единожды авторизовавшись в каком-то тесте, мы в последующих тестах будем использовать эту же авторизацию.

 

Компилим и пытаемся с этим всем взлететь. Сейчас начнется магия..






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.