Как дразнить контекст контроллера с moq

Изучение Python состоит в том, как я выучил язык. Это - быстрое чтение, и очень хорошо организованный вокруг фундаментальных понятий.

6
задан Pure.Krome 23 June 2010 в 05:38
поделиться

2 ответа

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

Что я делаю и что рекомендую, состоит в том, чтобы не полагаться на значения по умолчанию и явно указывать представление:

return View("About");

Тогда значение будет доступно для тестирования, ничего не высмеивая:

var controller = new HomeController();
var result = controller.About() as ViewResult;
Assert.AreEqual("About", result.ViewName);
7
ответ дан 10 December 2019 в 00:42
поделиться

Это потому, что вы делаете предположения о том, как работает среда MVC. Если вы полагаетесь на соглашения, чтобы найти представление, структура фактически оставляет свойство ViewName как String.Empty до тех пор, пока не будет вызван ExecuteResult () .

Вы можете это увидеть. код в строке 68 ViewResultBase.ExecuteResult внутри источника MVC :

if (String.IsNullOrEmpty(ViewName)) {
   ViewName = context.RouteData.GetRequiredString("action");
}

Кроме того, вы должны быть осторожны с тем, что вы тестируете. Как правило, вы должны сосредоточиться на тестировании кода, который вы пишете , а не кода фреймворка. Тестирование, чтобы убедиться, что имя представления по соглашению разрешено правильно, на самом деле является модульным тестом для самого фреймворка, а не приложения, построенного на нем.

Если вы ищете хороший способ использовать имитацию в MVC, вы можете проверить свои маршруты (которые похожи на то, что вы здесь пытаетесь сделать). Вы можете найти сообщение Фила Хаака, касающееся именно этой темы , чтобы начать.

3
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: