MVC 3 - Результат модульного тестирования контроллера - PullRequest
3 голосов
/ 19 мая 2011

Я пишу юнит-тесты для тестирования контроллеров MVC 3.Я хочу убедиться, что представление, которое возвращается из контроллера, является правильным представлением.В моем модульном тесте у меня есть:

[Test]
            public void It_Should_Return_The_Right_Page()
            {
                FormController fc = this.CreateFormController();
                var view = fc.FindX();
                Assert.AreEqual("FindX", view.ViewName);
            }

В моем контроллере у меня есть:

public ViewResult FindX()
        {
            return View();
        }

Это не удается, поскольку ViewName имеет значение null.Если я изменю вызов на return View("FindX") и явно определю возвращаемое представление, это сработает.Однако я хотел бы избежать этого, если это возможно.Есть ли общепринятый способ подойти к этому?

Ответы [ 3 ]

4 голосов
/ 20 мая 2011

Звучит так, как будто вы хотите передать следующее: Утвердите, что для этого метода было возвращено представление по умолчанию. Один из способов передать это - использовать эту строку:

var view = fc.FindX();

Assert.IsNull(view.ViewName) 

Но это не очень хорошо передает ваши намерения. Один из способов выразить это более четко - создать метод расширения для ActionResult или ViewResult с именем AssertIsDefaultView, например, так:

public static class ActionResultAssertions
{
    public static void AssertIsDefaultView(this ActionResult actionResult)
    {
        var viewResult = actionResult as ViewResult;

        Assert.IsNotNull(viewResult);
        Assert.IsNull(viewResult.ViewName);
    }
}

Тогда в своем тесте вы можете сказать:

var view = fc.FindX();
view.AssertIsDefaultView();

MvcContrib имеет набор этих утверждений (я думаю, что метод называется AssertViewRendered), но я предпочитаю просто написать расширения самостоятельно, чтобы лучше понимать MVC.

2 голосов
/ 19 мая 2011

Если вы не установили имя представления, значит, ViewName не является нулевым правильным и ожидаемым результатом, поэтому закодируйте ваш тест соответствующим образом.

Assert.IsNull(view.ViewName);
0 голосов
/ 03 декабря 2013

это сработало для меня

public ViewResult FindX()
    {
        return View("FindX");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...