登录页面的 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 实现并提供它。