Извините, что снова бью этот барабан, но я искал и искал способ модульного теста визуализированного представления в ASP.NET MVC (в настоящее время используется v2).
Я не на 100% удовлетворен использованием WatiN или Selenium для этого, они оба являются отличными инструментами, но слишком долго, чтобы выполнить тест для такого простого сценария, и тестируют намного больше, чем я необходимо.
Я также глубоко недоволен мантрой «Представления не должны проверяться», которая, по-видимому, вытекает из первопричины представлений в их текущем состоянии, просто не поддается тестированию вне более крупного интеграционного теста. :)
У меня уже есть тест на контроллере с "AssertViewRendered (). For (" Index "). WithViewData ()" и т. Д. Я просто хочу охватить, что данные отображаются представлением, когда оно включено Модель.
Представьте себе этот простой сценарий:
Контроллер:
public class SimpleController : Controller
{
public void Index()
{
var vm = new SimpleViewModel { Message = "Hello world!" };
return View(vm);
}
}
А это простой вид модели:
public class SimpleViewModel
{
public string Message { get; set; }
}
И простой вид:
`<%@ Page Language="C#"` `Inherits="System.Web.Mvc.ViewPage<SimpleViewModel>" %>`
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1><%= Model.Message %></h1>
</body>
</html>
Как мне автоматизировать с помощью простого модульного теста, что View фактически использует свойство Message, без необходимости использования таких инструментов тестирования интеграции с большим весом, как WatiN, и без веб-сервера?
Примерно так будет идеально:
[TestMethod]
public void ShouldDisplayMessage()
{
const string helloWorld = "Hello world!";
var view = new SimpleView(new SimpleViewModel { Message = helloWorld });
var result = view.GetRenderedString();
Assert.IsTrue(result.Contains(helloWorld));
}