C# 如何在ASP中测试AccountController?
我想在Asp.net中测试帐户控制器 账户控制员是身份的一部分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()
是否有必要测试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."));
}