Первые юнит-тесты! ASP.NET MVC с репозиториями, вызывающими ошибки - PullRequest
0 голосов
/ 18 февраля 2011

Я очень новичок в модульном тестировании, поэтому сегодня я начинаю свои первые тесты. Я использую библиотеку JustMock от Telerik. Хотя любая информация о модульном тестировании хороша. У меня возникли проблемы с интерфейсной службой, которая проходит через мой метод. Ниже мой 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 разрешается как ноль. Я не уверен, что делать здесь. Это мой первый опыт в аспекте модульного тестирования ASP.NET MVC. Кто-нибудь может дать мне совет?

Я использую Ninject, чтобы ввести IMembershipService через Конструктор. Реализуется классом MembershipService. Код работает нормально, когда я его запускаю, но модульные тесты не пройдены.

1 Ответ

1 голос
/ 19 февраля 2011

Я не вижу, чтобы вы передавали хранилище в ваш контроллер.Обычно у вас будет IMembershipService в качестве параметра в конструкторе вашего контроллера, который вы можете затем передать при необходимости или использовать сервисный локатор MVC, чтобы получить экземпляр Ninject и передать его.

:)

...