문제

저는 단위 테스트를 처음 접했기 때문에 오늘 첫 번째 테스트 세트를 시작하겠습니다.나는 도서관을 이용하고 있다 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 인스턴스를 가져와 전달할 수 있습니다.

:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top