Как проверить FormsAuthentication в приложении asp.net mvc 2.0 с - PullRequest
1 голос
/ 15 февраля 2010

Я сделал интерфейс со следующими методами:

Public Interface IAuthenticationService
    Sub SetAuthentication(ByVal username As String)
    Sub Logout()
    Function IsLoggedIn() As Boolean
End Interface

Моя реализация выглядит так:

Public Class Authentication
    Implements IAuthenticationService
    Public Sub Logout() Implements IAuthenticationService.Logout
        FormsAuthentication.SignOut()
        LoggedIn = False
    End Sub

    Public Sub SetAuthentication(ByVal username As String) Implements IAuthenticationService.SetAuthentication
        FormsAuthentication.SetAuthCookie(username, True)
        LoggedIn = True
    End Sub

    Public Function IsLoggedIn() As Boolean Implements IAuthenticationService.IsLoggedIn
        If LoggedIn Then Return True
        Return False
    End Function

    Private _isLoggedIn As Boolean = false
    Public Property LoggedIn() As Boolean
        Get
            Return _isLoggedIn
        End Get
        Set(ByVal value As Boolean)
            _isLoggedIn = value
        End Set
    End Property
End Class

В моем классе контроллеров у меня есть действие, которое устанавливает билет в моей FormsAuthentication:

    Public Function Login(ByVal username As String, ByVal password As String) As ActionResult

       _authenticationService.SetAuthentication(username)
        Return View()
    End Function

Мой вопрос: как я могу проверить мою FormsAuthentication на моем классе аутентификации. Я использую Xunit / Moq для написания своих тестов. Когда я вызываю свое действие, я получаю «System.NullReferenceException: Ссылка на объект не установлена ​​на экземпляр объекта», который говорит мне, что объект FormsAuthentication является Нулевым, и поэтому я не могу установить свой билет аутентификации. Какое лучшее решение для решения этой проблемы. Я буду рад за некоторые примеры кода или ссылки, где я могу получить вдохновение. Особенно, если решение насмешливо ...

1 Ответ

3 голосов
/ 15 февраля 2010

Создайте класс-оболочку для класса FormsAuthentication, как это ...

Public Interface IFormsAuthentication
    Sub SignIn(ByVal userName As String, ByVal createPersistentCookie As Bool) 
    Sub SignOut() 
End Interface 


Public Class FormsAuthenticationWrapper Implements IFormsAuthentication  

    Public Sub SignIn(ByVal userName As String, ByVal createPersistentCookie As Bool) Implements IFormsAuthentication.SignIn  
        FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    End Sub  

    Public Sub SignOut() Implements IFormsAuthentication.SignOut  
        FormsAuthentication.SignOut()  
    End Sub  

End Class 

Затем вы можете передать IFormsAuthentication в свой класс Authentication в качестве зависимости (через конструктор). Это позволит вам смоделировать вызов IFormsAuthentication при написании модульных тестов. : -)

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