如何对ASP.NET MVC项目的视图进行单元测试?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2316个文字,预计阅读时间需要10分钟。
关于视图的单元测试及ASP.NET MVC,我们似乎一直都在关注对Controller的测试——毕竟Stephen Walther也写过如何脱离Web Server对View进行单元测试的文章,但他的方法看起来可行却难以应用。复杂的构造“
关于视图的单元测试说到ASP.NET MVC,我们似乎始终都在关注对于Controller的测试——虽然Stephen Walther也写过如何脱离Web Server对View进行单元测试,但是他的方法可看而不可用。复杂的构造和预备,以及对生成的HTML字符串作判断——这真是在对视图做单元测试吗?仔细分析他的代码可以发现,这其实是在对ViewEngine做单元测试。而且,如果真要对ViewEngine做单元测试,也不应该像他那样依赖外部文件。在我看来,他的做法什么都不是……似乎美观,似乎能博得一些“掌声”,但是这个掌声是来自于他的解决方案,还是大家一时的冲动呢?
如果要对视图做单元测试,还是要将内容呈现在浏览器中才行。在对网页做单元测试时,我们一般会使用WatiN等工具操作浏览器,打开页面,再对其DOM元素结构及内容作断言。不过……这是单元测试吗?可惜这只能算是一种回归测试或用户验收测试。因为,我们在打开一个页面的时候,从表现层到业务逻辑再到数据访问,应用程序的每个部件都在忙碌着。而单元测试讲究的是“分离”,分离一切关注,分离一切依赖。因为分离,我们才能准确定位错误;因为分离,我们才能在测试中使用我们准备好的数据。
既然要分离,我们就必须遵循一定的使用规范。在《ASP.NET MVC单元测试最佳实践》中我提到,在View中只能使用ViewData中的数据,而不该依赖其他内容(包括HttpContext)。这样我们就可以自行构造ViewData并注入一个视图对象中。
本文共计2316个文字,预计阅读时间需要10分钟。
关于视图的单元测试及ASP.NET MVC,我们似乎一直都在关注对Controller的测试——毕竟Stephen Walther也写过如何脱离Web Server对View进行单元测试的文章,但他的方法看起来可行却难以应用。复杂的构造“
关于视图的单元测试说到ASP.NET MVC,我们似乎始终都在关注对于Controller的测试——虽然Stephen Walther也写过如何脱离Web Server对View进行单元测试,但是他的方法可看而不可用。复杂的构造和预备,以及对生成的HTML字符串作判断——这真是在对视图做单元测试吗?仔细分析他的代码可以发现,这其实是在对ViewEngine做单元测试。而且,如果真要对ViewEngine做单元测试,也不应该像他那样依赖外部文件。在我看来,他的做法什么都不是……似乎美观,似乎能博得一些“掌声”,但是这个掌声是来自于他的解决方案,还是大家一时的冲动呢?
如果要对视图做单元测试,还是要将内容呈现在浏览器中才行。在对网页做单元测试时,我们一般会使用WatiN等工具操作浏览器,打开页面,再对其DOM元素结构及内容作断言。不过……这是单元测试吗?可惜这只能算是一种回归测试或用户验收测试。因为,我们在打开一个页面的时候,从表现层到业务逻辑再到数据访问,应用程序的每个部件都在忙碌着。而单元测试讲究的是“分离”,分离一切关注,分离一切依赖。因为分离,我们才能准确定位错误;因为分离,我们才能在测试中使用我们准备好的数据。
既然要分离,我们就必须遵循一定的使用规范。在《ASP.NET MVC单元测试最佳实践》中我提到,在View中只能使用ViewData中的数据,而不该依赖其他内容(包括HttpContext)。这样我们就可以自行构造ViewData并注入一个视图对象中。

