我正在为我的项目写一个unitest登录。
当我调用我的控制器的登录功能时。 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)为空。
答案 0 :(得分:1)
您期望GetUser
返回什么?您是否希望它查询db / active目录并返回具有完整凭据的用户?
除非我记得错误,否则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
实施并提供它。