0

我对单元测试很陌生,所以我今天开始我的第一组测试。我正在使用JustMockTelerik 的图书馆。尽管任何单元测试信息都很好。通过我的方法的接口服务有点麻烦。下面是我的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。当我运行它时,代码运行良好,但单元测试失败。

4

1 回答 1

1

我没有看到您将存储库传递到您的控制器的任何地方。通常,您将 IMembershipService 作为控制器构造函数中的参数,然后您可以在需要时传入该参数,或者使用 MVC 的服务定位器获取 Ninject 实例并将其传入。

:)

于 2011-02-18T22:03:56.653 回答