Asp.net mvc 4 登录页面的Uni测试为空

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

我正在为我的项目中的登录编写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);



    }

这里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);