단위 테스트가 처음이므로 첫 번째 테스트를 시작합니다. 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
에 의해 구현됩니다. 코드를 실행하면 잘 실행되지만 단위 테스트는 실패합니다.
난 당신이 통과 볼 수 없습니다를 '리포지토리 '를 컨트롤러에 저장하십시오. 일반적으로 컨트롤러의 생성자에 매개 변수로'IMembershipService'를 넣을 수 있습니다. 필요할 때 전달하거나 MVC의 Service Locator를 사용하여 Ninject 인스턴스를 가져 와서 전달할 수 있습니다. – Buildstarted
예, 이것이 문제였습니다. 나는 서비스를 만들지 않았다. 그 질문을 답으로 게시하여 크레딧을 줄 수 있습니까? – Ciel