2014-09-18 1 views
-1

다음 코드를 AccountController.cs에서 가져 와서 ModelState의 유효성을 검사하는 로그인 함수 부분에 대해 단위 테스트를 실행하려고합니다. . 함수가 "작업"개체와 함께 새로운 "비동기"키워드를 사용하는 방법Visual Studio에서 테스트 코드에서 호출 된 비동기 함수에 오류가 발생했습니다.

// 
// POST: /Account/Login 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     // This doesn't count login failures towards account lockout 
     // To enable password failures to trigger account lockout, change to shouldLockout: true 
     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] 
    public void Account_ModelStateNotValid_ReturnsCorrectView() 
    { 
     //Arrange 
     AccountController ac = A.Fake<AccountController>(); 
     LoginViewModel model = A.Fake<LoginViewModel>(); 


     //Act 
     var result = await ac.Login(model, null); 
     A.CallTo(() => ac.ModelState.IsValid).Returns(false); 

     //Assert 
     // Assert.That() 

    } 

신경 끄시 고 ... 나는 그것을 완료하지 않은 이유는,

에서 바로 거기에 있기 때문이다 설정을 가지고
var result = await ac.Login(model, null); 

나는 다음과 같은 오류 얻을 : 참조를 위해 것을 내가 확인한

Error 31 The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'. 

을 (기호 변경 "LoginTest"에 "Login"을 입력하면 테스트 코드가 "LoginTest"를 호출하지 않는 오류가 발생합니다. 나는 누군가가 전에이 문제를 보았는지 궁금해서 아마 내가 잘못하고있는 것을 말해 줄 수있을 것이다.

미리 감사드립니다.

답변

2

테스트 metod를 비동기로 꾸미거나 컨트롤러의 작업에 .Result를 사용하십시오.

+0

감사합니다. –

관련 문제