C# 如何在ASP中测试AccountController?

C# 如何在ASP中测试AccountController?,c#,asp.net,unit-testing,asp.net-mvc-4,testing,C#,Asp.net,Unit Testing,Asp.net Mvc 4,Testing,我想在Asp.net中测试帐户控制器 账户控制员是身份的一部分 是否有必要测试Account Controller?对于一般的单元测试,您可以阅读本文 要测试AccountController,请看下面的文章 [测试] public void不应接受validuser() { //安排 Mock成员资格=新Mock(); membership.Setup(m=>m.ValidateUser(It.IsAny(),It.IsAny()) 。报税表(虚假); Mock forms=新Mock()

我想在Asp.net中测试帐户控制器 账户控制员是身份的一部分
是否有必要测试Account Controller?

对于一般的单元测试,您可以阅读本文

要测试AccountController,请看下面的文章

[测试]
public void不应接受validuser()
{
//安排
Mock成员资格=新Mock();
membership.Setup(m=>m.ValidateUser(It.IsAny(),It.IsAny())
。报税表(虚假);
Mock forms=新Mock();
var logonModel=new logonModel(){UserName=“”,Password=“”};
var控制器=新的AccountController(membership.Object、forms.Object);
//表演
var result=controller.LogOn(logonModel,“”)作为ViewResult;
//断言
Assert.That(result.ViewName,Is.EqualTo(“Index”);
Assert.False(controller.ModelState.IsValid);
Assert.That(controller.ModelState[“”),
Is.EqualTo(“提供的用户名或密码不正确。”);}

对于一般的单元测试,您可以查看本文

要测试AccountController,请看下面的文章

[测试]
public void不应接受validuser()
{
//安排
Mock成员资格=新Mock();
membership.Setup(m=>m.ValidateUser(It.IsAny(),It.IsAny())
。报税表(虚假);
Mock forms=新Mock();
var logonModel=new logonModel(){UserName=“”,Password=“”};
var控制器=新的AccountController(membership.Object、forms.Object);
//表演
var result=controller.LogOn(logonModel,“”)作为ViewResult;
//断言
Assert.That(result.ViewName,Is.EqualTo(“Index”);
Assert.False(controller.ModelState.IsValid);
Assert.That(controller.ModelState[“”),
Is.EqualTo(“提供的用户名或密码不正确。”);}

免责声明:我在Typemock工作

在使用时,测试ASP.net控制器,特别是帐户控制器是可能的,而且非常容易。 下面是一个测试Account controller登录方法的示例:

测试方法(取自VS2015 MVC模板):

[HttpPost]
[异名]
[ValidateAntiForgeryToken]

公共异步任务就是一个完整的例子。

免责声明:我在Typemock工作

在使用时,测试ASP.net控制器,特别是帐户控制器是可能的,而且非常容易。 下面是一个测试Account controller登录方法的示例:

测试方法(取自VS2015 MVC模板):

[HttpPost]
[异名]
[ValidateAntiForgeryToken]

公共异步任务是完整的示例。

我想测试帐户控制器的登录方法你能帮我吗?我想测试帐户控制器的登录方法你能帮我吗?谢谢Daniel如何安装隔离?Isolate Nuget软件包吗?我的回答中有一个指向Typemock隔离器站点的链接。谢谢Daniel如何安装Isolate?是隔离Nuget包吗?在我的回答中有一个指向Typemock隔离站点的链接。
   [Test]
   public void ShouldNotAcceptInvalidUser()
  {
  // Arrange
  Mock<IMembershipService> membership = new Mock<IMembershipService>();
  membership.Setup(m => m.ValidateUser(It.IsAny<string>(), It.IsAny<string>()))
          .Returns(false);
  Mock<IFormsService> forms = new Mock<IFormsService>();
var logonModel = new LogOnModel() { UserName = "", Password = "" };
var controller = new AccountController(membership.Object, forms.Object);

// Act
var result = controller.LogOn(logonModel, "") as ViewResult;

// Assert
Assert.That(result.ViewName, Is.EqualTo("Index"));
Assert.False(controller.ModelState.IsValid);
Assert.That(controller.ModelState[""], 
            Is.EqualTo("The user name or password provided is incorrect."));}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
    switch (result)
    {
        case SignInStatus.Success:
            return RedirectToLocal(returnUrl);
        case SignInStatus.LockedOut:
            return View("Lockout");
        case SignInStatus.RequiresVerification:
            return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
        case SignInStatus.Failure:
        default:
            ModelState.AddModelError("", "Invalid login attempt.");
            return View(model);
    }
}
[TestMethod, Isolated]
public async Task TestWhenLoginIsBad_ErrorMessageIsShown()
{
    // Arrange
    // Create the wanted controller for testing 
    var controller = new AccountController(); 
    var loginData = new LoginViewModel { Email = "support@typemock.com", Password = "password", RememberMe = false };

    // Fake the ModelState
    Isolate.WhenCalled(() => controller.ModelState.IsValid).WillReturn(true);

    // Ignore AddModelError (should be called when login fails)
    Isolate.WhenCalled(() => controller.ModelState.AddModelError("", "")).IgnoreCall();

    // Fake HttpContext to return a fake ApplicationSignInManager
    var fakeASIM = Isolate.WhenCalled(() => controller.HttpContext.GetOwinContext().Get<ApplicationSignInManager>()).ReturnRecursiveFake();

    // When password checked it will fail. Note we are faking an async method
    Isolate.WhenCalled(() => fakeASIM.PasswordSignInAsync(null, null, true, true)).WillReturn(Task.FromResult(SignInStatus.Failure));

    // Act
    var result = await controller.Login(loginData, "http://www.typemock.com/");

    // Assert
    // The result contains login data, doesn’t redirect
    Assert.IsInstanceOfType(result, typeof(ViewResult));
    Assert.AreSame(loginData, (result as ViewResult).Model);
    // Make sure that the code added an error
    Isolate.Verify.WasCalledWithExactArguments(() => controller.ModelState.AddModelError("", "Invalid login attempt."));
}