我很遗憾再次击败这个鼓,但我一直在寻找一种方法来对ASP.NET MVC中的渲染视图进行单元测试(目前使用的是v2).
我不是百分之百满意使用WatiN或Selenium来做到这一点,它们都是很棒的工具,但是对于这么简单的场景运行测试需要太长时间,并且测试方式比我需要的方式更多.
我也非常不满意"视图不应该被测试"的口头禅似乎源于视图的根本原因,在它们当前的状态下,在更大的集成测试之外是不可测试的.:)
我已经在Controller上测试了"AssertViewRendered().For("Index").WithViewData()"等等.我只是想要覆盖视图在模型上显示的数据.
想象一下这个简单的场景:
控制器:
public class SimpleController : Controller
{
public void Index()
{
var vm = new SimpleViewModel { Message = "Hello world!" };
return View(vm);
}
}
Run Code Online (Sandbox Code Playgroud)
而这个简单的视图模型:
public class SimpleViewModel
{
public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
一个简单的观点:
`<%@ 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>
Run Code Online (Sandbox Code Playgroud)
如何使用View实际使用Message属性的简单单元测试进行自动化,而无需使用WatiN等重量级集成测试工具,也无需使用Web服务器?
这样的事情是理想的:
[TestMethod]
public void ShouldDisplayMessage()
{
const string helloWorld = …Run Code Online (Sandbox Code Playgroud)