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 の Service Locator を使用して Ninject インスタンスを取得して渡すことができます。

:)

于 2011-02-18T22:03:56.653 に答える