登录页面的 Uni 测试给出 null
Uni Test for Log in Page giving null
我正在为我的项目编写一个用于登录的单元测试。
当我调用控制器的登录功能时。 Memership.GetUser 为通过的用户提供空值。
下面是测试用例
[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);
}
控制器功能是
public JsonResult Login(AccountBO account, string returnUrl = "")
{
bool hasBeenUnlocked = false;
if (ModelState.IsValid)
{
MembershipUser adminUser;
adminUser = Membership.GetUser(account.Email);
------so on
}
}
此处 adminUser = Membership.GetUser(account.Email) 给出空值。
您对 GetUser
和 return 的期望是什么?您是否希望它查询 db/active 目录和 return 具有完整凭据的用户?
除非我没记错,否则 Membership
是 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);
通过构造函数注入用户的地方。然后在您的测试中创建您自己的 IProvideUsers
实现并提供它。
我正在为我的项目编写一个用于登录的单元测试。
当我调用控制器的登录功能时。 Memership.GetUser 为通过的用户提供空值。 下面是测试用例
[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);
}
控制器功能是
public JsonResult Login(AccountBO account, string returnUrl = "")
{
bool hasBeenUnlocked = false;
if (ModelState.IsValid)
{
MembershipUser adminUser;
adminUser = Membership.GetUser(account.Email);
------so on
}
}
此处 adminUser = Membership.GetUser(account.Email) 给出空值。
您对 GetUser
和 return 的期望是什么?您是否希望它查询 db/active 目录和 return 具有完整凭据的用户?
除非我没记错,否则 Membership
是 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);
通过构造函数注入用户的地方。然后在您的测试中创建您自己的 IProvideUsers
实现并提供它。