Asp.net mvc 如何在ASP.NET MVC中模拟成员类以启用测试
我正在构建一个允许用户注册的ASP.NETMVC3站点。为此,我使用内置(静态)Asp.net mvc 如何在ASP.NET MVC中模拟成员类以启用测试,asp.net-mvc,unit-testing,mocking,asp.net-membership,Asp.net Mvc,Unit Testing,Mocking,Asp.net Membership,我正在构建一个允许用户注册的ASP.NETMVC3站点。为此,我使用内置(静态)Membership类;有人说它是臃肿的,但它工作得很好,很容易,所以你有 无论如何,我已经开始编写和AdminService类,该类将处理与用户帐户相关的功能,我们假设它只有一个方法: public class AdminService : IAdminService { public void DeleteUser(string username) { Membership.DeleteU
Membership
类;有人说它是臃肿的,但它工作得很好,很容易,所以你有
无论如何,我已经开始编写和AdminService类,该类将处理与用户帐户相关的功能,我们假设它只有一个方法:
public class AdminService : IAdminService
{
public void DeleteUser(string username)
{
Membership.DeleteUser(username);
}
}
像这样使用成员类有两种错误:它不能通过IoC注入,而且我发现为IAdminService
编写规范(测试)越来越困难,因为我无法模拟成员类
有没有一种方法可以使ASP.NET成员资格类测试友好和依赖项注入友好,而不必使用我自己的方法
当涉及到功能时,Membership类工作得很好,更重要的是,它
现在可以工作了,所以我真的不愿意开始编写我自己的会员资格提供商,因为这只会让我慢下来。我在构建MVC站点时也遇到过同样的情况,最终推出了我自己的(可测试的)提供商 话虽如此,一种选择是只从中提取示例实现—您(理论上)可以只构建一个伪造的提供者,并对各种返回方法进行硬编码,而不是命中SQL数据库
其中一个方法中的方法总数非常少,如果您想伪造这些方法,那么拥有这些方法并不是一件坏事。如果您创建了非空的ASP.NET MVC 3项目,则模型文件夹中将有AccountModels.cs文件。它包含如何处理成员资格以启用单元测试的示例:
public interface IMembershipService
{
int MinPasswordLength { get; }
bool ValidateUser(string userName, string password);
MembershipCreateStatus CreateUser(string userName, string password, string email);
bool ChangePassword(string userName, string oldPassword, string newPassword);
}
感谢用户控制;我通常从一个自制的“模板”开始,而我完全忘记了IMembershipService接口。