Uni Test for Log in Page给出null

时间:2015-01-07 08:54:35

标签: asp.net-mvc-4 unit-testing testing tdd

我正在为我的项目写一个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)为空。

1 个答案:

答案 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实施并提供它。