Ich möchte Konto-Controller in Asp.net testen Konto-Controller ist Teil der Identität Ist es notwendig, Konto Controller zu testen?So testen Sie AccountController in ASP?
Antwort
Für Unit-Tests in der Regel können Sie einen Blick in diesem Artikel nehmen
Für die Prüfung auf Konto-Controller, schau Dir die folgenden Artikel
http://blogs.interknowlogy.com/2014/08/21/mvc-series-part-2-accountcontroller-testing/
[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."));}
Haftungsausschluss: Ich arbeite bei Typemock.
Es ist möglich und auch ziemlich einfach, ASP.net Controller im Allgemeinen und Account Controller insbesondere zu testen, wenn Sie Typemock Isolator verwenden. Hier ist ein Beispiel für einen Test für die Login-Methode von Konto-Controller:
Verfahren im Test (aus VS2015 MVC-Vorlage):
[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);
}
}
Test:
[TestMethod, Isolated]
public async Task TestWhenLoginIsBad_ErrorMessageIsShown()
{
// Arrange
// Create the wanted controller for testing
var controller = new AccountController();
var loginData = new LoginViewModel { Email = "[email protected]", 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."));
}
Wenn Sie würde gerne mehr erfahren here ist das vollständige Beispiel.
Danke Daniel Wie installiere ich Isolate? Ist Isolat Nuget-Paket? –
In meiner Antwort gibt es einen Link zur Typemock-Isolator-Site. – Daniel
Ich möchte testen Anmeldung MEthod OF OF Account Controller Können Sie mir helfen? –
Probieren Sie das neue aus. –