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

В своих модульных тестах я обнаружил, что когда я возвращаюсь из действия контроллера с помощью 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 является одним из надежных свойств, которые можно проверить в утверждениях модульных тестов.


person alastairs    schedule 18.11.2009    source источник


Ответы (1)


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

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

ХТН.

person Thomas Weller    schedule 18.11.2009
comment
Я понимаю. Есть ли рекомендуемая статья/пост/что-то еще о соответствующих утверждениях? - person alastairs; 18.11.2009
comment
Ни одного. Если вы погуглите что-то вроде модульного тестирования asp.net mvc, вы получите сотни статей/сообщений в блогах, посвященных этой проблеме. Это полностью зависит от того, что именно вы хотите протестировать. - person Thomas Weller; 19.11.2009