0

我正在尝试使用内置的 Visual Studio 测试工具对一个控制器操作进行单元测试,该操作使用 FormsAuthentication.SetAuthCookie(string,boolean) 为用户设置表单身份验证。问题是当我调用它时,我得到一个 NullReferenceException。调用中的所有对象都不是 null,因此异常必须与该方法尝试使用的其他内容相关。

我已经在模拟(使用 Moq)ControllerContext 以解析其他一些值。但是,我不知道我可以模拟什么(如果有的话)来让 SetAuthCookie 工作。

通过 WebSecurity.Login(string,string,boolean) 方法调用 SetAuthCookie(string,boolean) 方法

4

1 回答 1

0

不幸的是,该方法是静态的,不可模拟。但是,您可以将其包装在某种接口的服务中并对其进行测试。

public interface IAuthenticationService
{
    void SetAuthCookie(string userName, bool createPersistentCookie);
)

public class AuthenticationService : IAuthenticationService
{
    public void SetAuthCookie(string userName, bool createPersistentCookie)
    {
        FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    }
}

所以现在你可以IAuthenticationService在你的控制器中有一个并测试该SetAuthCookie方法是否在它应该被调用的时候被调用。

于 2013-09-16T18:58:06.930 回答