Почему указание имени вида не приводит к сбою моего модульного теста? - PullRequest
0 голосов
/ 18 ноября 2009

В моих модульных тестах я обнаружил, что когда я возвращаюсь из действия контроллера, используя View () без имени представления, ViewResult.ViewName устанавливается в string.Empty. Для того чтобы это можно было установить, оно должно быть указано в качестве параметра для вызова View (). Например, дан следующий модульный тест:

[TextFixture]
public class MyControllerTests 
{
    [Test]
    public void TestMyAction() 
    {
        var controller = new MyController();
        var result = controller.MyAction();

        Assert.AreEqual("MyAction", result.ViewName);
    }
}

Следующая реализация действия приведет к сбою модульного теста:

public class MyController : Controller 
{
    public ActionResult MyAction() 
    {
        return View();
    }
}

пока этот пройдет:

public class MyController : Controller 
{
    public ActionResult MyAction() 
    {
        return View("MyAction");
    }
}

Я использую ASP.NET MVC 2 (предварительная бета-версия) в .NET 4.0. Однако я не использую ничего специфичного для .NET 4.0. Я нахожу это поведение странным, потому что я думал, что ViewName является одним из надежных свойств, которые можно проверить в утверждениях модульных тестов.

1 Ответ

3 голосов
/ 18 ноября 2009

Это хорошо известная «особенность» ASP.NET MVC. Microsoft документировала это с первой версии ...

Когда явное имя представления не указано, платформа пытается найти его на основе соглашений (в «Views \ controllername \ actionname» или «Shared \ controllername \ actionname»). ViewName имеет значение только в том случае, если вы хотите отклониться от этого соглашения. Таким образом, ваш модульный тест делает ложные предположения.

НТН.

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