NUnit - ошибка UpdateModel: исключение NullReferenceException - PullRequest
1 голос
/ 14 ноября 2011

У меня проблема с тестированием классов, которые используют метод UpdateModel ().Я получаю System.NullReferenceException.Я использую NUnit.Это мой метод от HomeController:

    public ActionResult ProjectsEdit(Projects model)
    {
        var projects = db.Projects.First();
        projects.Content = model.Content;
        UpdateModel(projects);
        db.SaveChanges();
        return RedirectToAction("Projects");            
    }

Вот тестовый класс:

    [Test]
    public void ProjectsEditPostTest()
    {
        var routeData = new RouteData();
        var httpContext = MockRepository.GenerateStub<HttpContextBase>();
        //var httpContext = new FakeHttpContext("Edit");
        FormCollection formParameters = new FormCollection();
        ControllerContext controllerContext =
        MockRepository.GenerateStub<ControllerContext>(httpContext,
                                                            routeData,
                                                            controller);
        controller.ControllerContext = controllerContext;

        // Act
        string newContent = "new content";
        Projects projects = new Projects { ID = 1, Content = newContent };
        controller.ProjectsEdit(projects);

        // Assert
        Assert.AreEqual(newContent, controller.db.Projects.First().Content);            
    }

Что я должен сделать, чтобы он работал?

1 Ответ

4 голосов
/ 14 ноября 2011

Просто добавьте следующую строку в фазе подтверждения:

controller.ValueProvider = formParameters.ToValueProvider();

Он присваивает провайдеру значения контроллер, на котором основан метод UpdateModel. Этот поставщик значений связан с определенной вами переменной FormCollection и позволяет передавать некоторые значения.

Вы также можете проверить аналогичный ответ , который использует MvcContrib.TestHelper для упрощения фазы аранжировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...