我正在以测试驱动的方式使用ASP.NET MVC解决方案,并希望使用表单认证登录用户到我的应用程序中。我想在控制器中最终得到的代码类似于:
FormsAuthentication.SetAuthCookie(userName, false);
我的问题是如何编写一个测试来验证这段代码?有没有方法可以检查SetAuthCookie方法是否使用了正确的参数?是否有任何方法可以注入虚假/模拟FormsAuthentication?我正在以测试驱动的方式使用ASP.NET MVC解决方案,并希望使用表单认证登录用户到我的应用程序中。我想在控制器中最终得到的代码类似于:
FormsAuthentication.SetAuthCookie(userName, false);
我的问题是如何编写一个测试来验证这段代码?有没有方法可以检查SetAuthCookie方法是否使用了正确的参数?是否有任何方法可以注入虚假/模拟FormsAuthentication?我会先编写一个接口和包装类来封装这个逻辑,然后在我的控制器中使用该接口:
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
,后者执行了它应该执行的操作(得到了微软的保证 :-))。
IAuth
接口,不再使用任何FormsAuthentication。 - Darin Dimitrov