Как я могу выполнить модульное тестирование моего контроллера ASP.NET MVC, который использует FormsAuthentication? - PullRequest
47 голосов
/ 14 декабря 2008

Я работаю с решением ASP.NET MVC в тестовом режиме и хочу зарегистрировать пользователя в своем приложении, используя аутентификацию по формам Код, который я хотел бы получить в контроллере, выглядит примерно так:

FormsAuthentication.SetAuthCookie(userName, false);

Мой вопрос: как мне написать тест для обоснования этого кода?

Есть ли способ проверить, что метод SetAuthCookie был вызван с правильными параметрами?

Есть ли способ ввести поддельную / поддельную проверку подлинности FormsAuthentication?

1 Ответ

68 голосов
/ 14 декабря 2008

Я бы начал с написания интерфейса и класса-оболочки, который инкапсулирует эту логику, а затем использовал бы интерфейс в моем контроллере:

public interface IAuth 
{
    void DoAuth(string userName, bool remember);
}

public class FormsAuthWrapper : IAuth 
{
    public void DoAuth(string userName, bool remember) 
    {
        FormsAuthentication.SetAuthCookie(userName, remember);
    }
}

public class MyController : Controller 
{
    private readonly IAuth _auth;

    public MyController(IAuth auth) 
    {
        _auth = auth;
    }

}

Теперь IAuth можно легко смоделировать в модульном тесте и убедиться, что контроллер вызывает для него ожидаемые методы. Я НЕ стал бы модульно тестировать класс FormsAuthWrapper, поскольку он просто делегирует вызов FormsAuthentication, который делает то, что должен (Microsoft гарантирует: -)).

...