Asp.net mvc 4 登录页面的Uni测试为空
我正在为我的项目中的登录编写unitest 当我调用控制器的登录功能时。Memership.GetUser为传递的用户提供空值。 下面是测试用例Asp.net mvc 4 登录页面的Uni测试为空,asp.net-mvc-4,unit-testing,testing,tdd,Asp.net Mvc 4,Unit Testing,Testing,Tdd,我正在为我的项目中的登录编写unitest 当我调用控制器的登录功能时。Memership.GetUser为传递的用户提供空值。 下面是测试用例 [TestMethod] public void Login() { //Arrange AccountController account = new AccountController(_forgotPasswordTokensRepo, _IMessageTemplateDAO, _IEmailS
[TestMethod]
public void Login()
{
//Arrange
AccountController account = new AccountController(_forgotPasswordTokensRepo, _IMessageTemplateDAO, _IEmailService, _ISettingDAO, _IProfileDAO);
List<AccountBO> TestUsers = new List<AccountBO>();
AccountBO objAccountBO = new AccountBO();
objAccountBO.Email = "uu@yopmail.com";
objAccountBO.Password = "123456789";
TestUsers.Add(objAccountBO);
var result = (JsonResult)account.Login(TestUsers[0]);
var json = new System.Web.Script.Serialization.JavaScriptSerializer();
string data = result.Data.ToString().Split('=')[1].Trim();
bool Processdata = Convert.ToBoolean(data.Replace('}', ' ').Trim());
Assert.AreEqual<bool>(true, Processdata);
}
这里adminUser=Membership.GetUser(account.Email)为空。您希望
GetUser
返回什么?您是否希望它查询db/active directory并返回具有完整凭据的用户
除非我记错了,成员资格
是Asp.Net基础结构的一部分,因此它不是在单元测试的上下文中设置的。解决办法不是设置它。这是为了剔除该功能
public interface IProvideUsers {
public MembershipUser Get(string email, string password);
}
public class AspNetMembershipProvider : IProvideUsers {
public MembershipUser Get(string email) {
//...
}
}
然后在你的控制器里
IProvideUsers users;
....
users.Get(account.Email, account.Password);
其中用户通过构造函数注入。然后在您的测试中,您创建自己的
iproviders实现并提供它。您是否对成员身份进行单元测试。GetUser(…)
成功?因此,请首先修复该单元测试?这不是真正的测试,也绝对不是tdd。根据您的需要,可以对成员资格提供程序进行存根,也可以对其进行存根/模拟
IProvideUsers users;
....
users.Get(account.Email, account.Password);