2016-07-20 14 views

Antwort

0

Für Unit-Tests in der Regel können Sie einen Blick in diesem Artikel nehmen

http://www.asp.net/mvc/overview/older-versions-1/unit-testing/creating-unit-tests-for-asp-net-mvc-applications-cs

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."));} 
+0

Ich möchte testen Anmeldung MEthod OF OF Account Controller Können Sie mir helfen? –

+0

Probieren Sie das neue aus. –

1

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.

+0

Danke Daniel Wie installiere ich Isolate? Ist Isolat Nuget-Paket? –

+0

In meiner Antwort gibt es einen Link zur Typemock-Isolator-Site. – Daniel