2011-02-18 5 views
0

단위 테스트가 처음이므로 첫 번째 테스트를 시작합니다. Telerik에서 라이브러리 JustMock을 사용하고 있습니다. 모든 단위 테스트 정보가 좋지만. 내 방법을 통과하는 인터페이스 서비스에 약간의 문제가 있습니다. 다음은 내 MembershipController.Register(model) 방법 ...첫 번째 단위 테스트! 리포지토리가 오류를 일으키는 ASP.NET MVC

[CaptchaValidator] 
    [HttpPost] 
    public ActionResult Register(Models.Membership.Registration model) 
    { 
     // just for good mesure, truncate any spaces that are given 
     System.Text.RegularExpressions.Regex.Replace(model.Email, @"\s", ""); 

     if (ModelState.IsValid) 
     { 
      // Attempt to register the User and return any applicable status that has to do 
      // with the result. 
      var createStatus = membershipService.RegisterMember(model.Email, model.Password); 

      // if the member is able to be created successfully, log them in now and begin the 
      // authentication portion of the registration, otherwise, display the registration 
      // errors and return to the view. 
      if (createStatus == Membership.MemberCreateStatus.Success) 
      { 
       formsAuthentication.SignIn(model.Email, false /* createPersistentCookie */); 
       return RedirectToAction("Success"); 
      } 
      else 
      { 
       ModelState.AddModelError("", Membership.Validator.ErrorCodeToString(createStatus)); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

입니다 그리고 여기에 내가 실행하려고하고있는 하찮은 테스트입니다 ... membershipService는 null를 해결하기 때문에

[TestMethod] 
    public void Register_Post_ReturnsRedirectOnSuccess() 
    { 
     // Arrange 
     var controller = Mock.Create<Web.Controllers.MembershipController>(); 

     var repository = Mock.Create<Membership.IMembershipService>(); 

     Mock.Arrange(() => repository.RegisterMember("[email protected]", "acceptiblePassword")).Returns(Membership.MemberCreateStatus.Success); 

     // Model 
     var model = new Web.Models.Membership.Registration 
     { 
      Email = "[email protected]", 
      Password = "acceptiblePassword", 
      ConfirmPassword = "acceptiblePassword" 
     }; 

     // Act 
     var result = controller.Register(model); 

     // Assert 
     Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult)); 

    } 

테스트가 실패합니다. 나는 여기서 무엇을해야할지 모르겠다. 이것은 ASP.NET MVC의 단위 테스트 측면에 대한 첫 번째 시도입니다. 누구든지 조언을 해줄 수 있습니까?

Ninject을 사용하여 IMembershipService을 생성자를 통해 주입하고 있습니다. 이것은 클래스 MembershipService에 의해 구현됩니다. 코드를 실행하면 잘 실행되지만 단위 테스트는 실패합니다.

+1

난 당신이 통과 볼 수 없습니다를 '리포지토리 '를 컨트롤러에 저장하십시오. 일반적으로 컨트롤러의 생성자에 매개 변수로'IMembershipService'를 넣을 수 있습니다. 필요할 때 전달하거나 MVC의 Service Locator를 사용하여 Ninject 인스턴스를 가져 와서 전달할 수 있습니다. – Buildstarted

+0

예, 이것이 문제였습니다. 나는 서비스를 만들지 않았다. 그 질문을 답으로 게시하여 크레딧을 줄 수 있습니까? – Ciel

답변

1

어디서나 저장소에 저장소를 전달하는 것을 보지 못합니다. 일반적으로 당신은 당신이 다음 필요로 할 때의 통과 또는 Ninject에 인스턴스를 잡아 그것을 전달하는 MVC의 서비스 로케이터를 사용할 수있는 컨트롤러의 생성자에서 매개 변수로 IMembershipService있을 것입니다.

:)