2017-01-28 6 views
-2

Как проверить метод, который очищает пользователя сеанса и выхода из системы.Как проверить session.clear() в Mocking unit test

мой метод управления выглядит

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult LogOff() 
    { 
    SessionAdapter.Clear(); 
    SessionAdapter.Abandon();   
    AuthenticationManager.SignOut 
        (DefaultAuthenticationTypes.ApplicationCookie); 
    return RedirectToAction("Index", "Home"); 
    } 

Здесь сессии адаптер мой статический класс

public static class SessionAdapter 
    { 
    private static string sessionKey = "sessionInfoKey"; 

    public static SessionInfo Instance 
    { 
     get 
     { 
     return HttpContext.Current.Session[sessionKey] == null ? null : (SessionInfo)HttpContext.Current.Session[sessionKey]; 
     } 
     set 
     { 
     HttpContext.Current.Session[sessionKey] = value; 
     } 
    } 

    public static bool DoesSessionExists { get { return HttpContext.Current.Session[sessionKey] == null ? false : true; } } 

    public static void Clear() 
    { 
     HttpContext.Current.Session.Clear(); 
    } 
} 

Пожалуйста, помогите мне

ответ

1

В модульном тесте вы должны насмешливой из сеанса, так как это внешнее зависимость. В ваших модульных тестах должен тестироваться ваш код, а не .net framework.

Таким образом, действительный тест может заключаться в проверке того, что вызов Session.Clear произошел, а не на самом деле тестирование Session.Clear очищает сеанс.

Это можно сделать, установив поддельный сеанс. Вот метод расширения я использую для установки моего контекста контроллера для модульного тестирования

государственного статической силы SetControllerContext (этот контроллер контроллера) { вар fakeContext = A.Fake(); var fakeRequest = A.Fake(); var fakeResponse = A.Fake(); var fakeSessionState = A.Fake();

 A.CallTo(() => fakeRequest.HttpMethod).Returns(HttpVerbs.Post.ToString()); 
     A.CallTo(() => fakeContext.Response).Returns(fakeResponse); 
     A.CallTo(() => fakeContext.Request).Returns(fakeRequest); 
     A.CallTo(() => fakeContext.Session).Returns(fakeSessionState); 

     var fakeRequestContext = new RequestContext(fakeContext, new RouteData()); 

     controller.ControllerContext = new ControllerContext(fakeRequestContext, controller); 
    } 

Это использование FakeItEasy, но то же самое можно сделать с помощью Moq.

От MS «Состояние сеанса ASP.NET позволяет сохранять и извлекать значения для пользователя, когда пользователь просматривает страницы ASP.NET в веб-приложении».

Каково значение в обертывании этого в статическом классе?