첫 번째 단위 테스트!오류를 일으키는 리포지토리가 있는 ASP.NET MVC
-
15-11-2019 - |
문제
저는 단위 테스트를 처음 접했기 때문에 오늘 첫 번째 테스트 세트를 시작하겠습니다.나는 도서관을 이용하고 있다 JustMock
텔레릭에서.어떤 단위 테스트 정보라도 좋습니다.내 메서드를 통과하는 인터페이스 서비스에 약간의 문제가 있습니다.아래는 내 MembershipController.Register(model)
방법...
[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);
}
그리고 여기에 제가 실행하려는 사소한 테스트가 있습니다.
[TestMethod]
public void Register_Post_ReturnsRedirectOnSuccess()
{
// Arrange
var controller = Mock.Create<Web.Controllers.MembershipController>();
var repository = Mock.Create<Membership.IMembershipService>();
Mock.Arrange(() => repository.RegisterMember("acceptible@email.com", "acceptiblePassword")).Returns(Membership.MemberCreateStatus.Success);
// Model
var model = new Web.Models.Membership.Registration
{
Email = "acceptible@email.com",
Password = "acceptiblePassword",
ConfirmPassword = "acceptiblePassword"
};
// Act
var result = controller.Register(model);
// Assert
Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
}
테스트가 실패하는 이유는 다음과 같습니다. membershipService
null로 확인됩니다.여기서 무엇을 해야할지 모르겠습니다.이것은 ASP.NET MVC의 단위 테스트 측면에 대한 첫 번째 시도입니다.누구든지 나에게 조언을 해줄 수 있습니까?
나는 사용하고있다 Ninject
주사하다 IMembershipService
생성자를 통해.클래스로 구현됩니다. MembershipService
.코드를 실행하면 정상적으로 실행되지만 단위 테스트가 실패합니다.
해결책
컨트롤러의 어느 곳에서나 저장소를 전달하는 것을 볼 수 없습니다.일반적으로 IMembershipService를 컨트롤러 생성자의 매개변수로 사용하여 필요할 때 전달할 수 있거나 MVC의 서비스 로케이터를 사용하여 Ninject 인스턴스를 가져와 전달할 수 있습니다.
:)
제휴하지 않습니다 StackOverflow