ASP.NET MVC Contact Manager开发之旅迭代5

迭代5 建立单元测试

本次迭代

在上一次对Contact Manager的迭代中,我们通过使用一些设计模式对 程序进行了重构,松散了类之间的耦合。我们将controller、service和repository层分别 独立出来。每层都基于接口与其他层进行交互。

通过重构,应用程序变得更以维护 和修改。假如某天你需要使用其他的数据存储技术,那么只要简单的替换repository层即可 ,并不需要去碰controller或service层中的代码。

但当我们需要向Contact Manager中添加新功能或修正bug时呢?残酷的事实告诉我们,每当我们改动代码的时候,也 必定要承担新bug出现的风险。

例如某天,你的头需要你向Contact Manager中添加 一项新功能。她要求程序支持对联系人信息进行分组,她要求用户可以自定义一些如 “朋友”,“同事”租入此类的分组从而组织他们的联系人信息。

为了实现这项功能,你需要修改Contact Manager中全部三层之中的代码。你需要向 controller、service、repository层中添加一系列的新函数。从你开始修改代码的那一刻 开始,你就必须承担有可能破坏原本正常工作的那部分功能的风险。

上次我们将应 用程序重构并将其分散到若干独立的层中,这使得我们可以在不触碰其他代码的情况下对某 层做出改变。然而,当你希望这个具体的层中的代码更易维护和修改时,你应当为代码建立 单元测试。

你可以通过单元测试针对特定的代码单元进行测试。这些代码单元要比 整个层小得多。例如你测试代码中的某个特定的方法,确认其是否达到预期的功能及表现, 这就是一个经典的单元测试场景。如你想要对ContactManagerService类公开的 CreateContact()方法进行单元测试。

单元测试对于整个应用程序的开发过程而言更 像一个安全网络。当你想修改应用程序中的代码时,你可以进行一系列的单元测试来检测是 否你的新代码对原有功能产生了破坏。单元测试为你的代码修改工作提供了更高的安全系数 ,同时单元测试也使得应用程序中的代码变更场景更具弹性。

在这次迭代中,我们 向Contact Manager添加单元测试。得益于此,在下一次迭代中我们可以为其添加新的联系 人分组功能,同时又无需顾虑这些改变是否会对原有功能产生影响。

那么就从这里 开始

在完美的世界中,应用程序中的所有代码都是经过单元测试的。在完美的世界 中,你拥有一个完美的安全网络体系,你可以修改应用程序总的任意一行代码并且立即通过 单元测试得知这些改动是否会对原有的功能产生影响。

然而这个世界在大部分的情 况下还不够完美。在实践中,当我们进行单元测试时,你需要集中精力针对业务逻辑进行测验 (例如,验证逻辑)。在特殊情况下,你无需对数据访问逻辑或视图逻辑进行单元测试。

单元测试必须是可以快速执行的。你将很轻易的为应用程序积累成百上千的单元测 试。如过运行某些单元测试十分耗时,则你应当避免执行它们。换句话说,耗时的单元测试 对日常的编码工作并无益处。

因此,你无需对与数据库实际交互的代码进行单元测 试。运行几百个针对数据库的单元测试将十分缓慢。你应当对你的数据库进行mock,然后编 写代码与mock的数据库进行交互。(下面我们将讨论如何对数据库进行mock)

相似 的,你无需针对view进行单元测试。要想对view进行测试,你就不得不搭建web服务器。因 为搭建web服务器相对来说也很耗时,这里并不推荐针对view进行单元测试。

如果你 的view包含大量复杂的逻辑,则你应当考虑将这些逻辑转移到Helper方法中。你可以针对 Helper方法编写单元测试且无需搭建web服务器。

虽然针对数据存储逻辑或试图的测 试并不被推荐,但这些测试可能在集成测试或功能测试时十分有用。

ASP.NET MVC默 认使用Web Form试图引擎。该引擎依赖于web服务器,其他的试图引擎或许不尽如此。

时间: 2024-08-07 15:07:05

ASP.NET MVC Contact Manager开发之旅迭代5的相关文章

ASP.NET MVC Contact Manager开发之旅迭代3

迭代3 - 验证表单 这是Contact Manager的第三次迭代,在这次迭代中我们将为Contact Manager添加基本 的表单验证.如果用户填写的表单不完整,我们将阻止其表单的提交.另外我们还要验证电 话号码和电子邮件地址的合法性.(图1) 开发之旅迭代3-"> 图1 本次迭代中,我们将验证逻辑直接写在controller的action中,不过这并不 是ASP.NET MVC应用所推荐的方式.更好的办法是将这些验证逻辑布置到另外的service层中 .下一次迭代的时候我们将重构C

ASP.NET MVC Contact Manager开发之旅迭代4

迭代4 利用设计模式松散耦合 本次迭代 这是ContactManager的第四次迭代,本次迭代中我们将重构应用程序, 通过合理的利用设计模式松散其耦合.松耦合的程序更有弹性,更易维护.当应用程序面临 改动时,你只需修改某一部分的代码,而不会出现大量修改与其耦合严重的相关代码这种牵 一发而动全身的情况. 在当前的ContactManager应用中,所有的数据存储及验证逻 辑都分布在controller类中,这并不是个好主意.要知道这种情况下一旦你需要修改其中一 部分代码,你将同时面临为其他部分增加

ASP.NET MVC Contact Manager开发之旅之迭代2

迭代2 - 修改样式,美化应用 这次迭代中,我们通过修改ASP.NET MVC的母板视图及CSS来改善应用程序的观感. 本次迭代 本次迭代的目标是改善Contact Manager应用程序的表现.Contact Manager当前使用的 是ASP.NET MVC默认的母板视图和CSS(图1).虽然并不难看,可我不也并不希望我们的 Contact Manager看起还和其他的ASP.NET MVC站点都一个模子刻出来的.我希望自定义这些 文件. 开发之旅之迭代2-"> 图 1 在这次迭代的过

ASP.NET MVC Contact Manager开发之旅之迭代1

注:为保证可读性,文中Controller.View.Model.Route.Action等ASP.NET MVC核心 单词均未翻译. 迭代1 - 创建应用程序 在这个系列中,我们将从头至尾的创 建一个Contact Management应用程序.我们可以通过它来管理亲戚.朋友.同事的联系信息 ,如名字.电话号码.电子邮件地址等等. 我们将通过迭代的方式开发这个应用, 并在每次迭代的过程中逐渐的扩展和改善该应用程序. 本次迭代 在这第一次 迭代中,我们将用最快最简单的方式建立起Contanct

ASP.NET MVC 5-开始MVC5之旅

原文:ASP.NET MVC 5-开始MVC5之旅 本教程将使用Visual Studio 2013手把手教你构建一个入门的ASP.NET MVC5 Web应用程序.本教程配套的C#源码工程可通过如下网址下载:C#版本源码链接.同时,请查阅 Building the Chapter Downloads 来完成编译源码和配置数据库. 在本教程中的源码工程,您可在Visual Studio中运行MVC 5应用程序.您也可以使Web应用程序部署到一个托管服务提供商上.微软提供免费的网络托管多达10个网

“.NET研究”专访微软MVP衣明志:走进ASP.NET MVC 2框架开发

日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭凡专门采访了微软MVP衣明志老师.ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET WEB应用程序的一个框架. MVP专访人物介绍 衣明志,蝉联五届微软MVP,烟台.NET俱乐部主席,现主要从事.NET平台下的Web应用开发.解决方案.构架设计及技术培训等工作.   照片居中者为衣

专访微软MVP衣明志:走进ASP.NET MVC 2框架开发

日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭凡专门采访了微软MVP衣明志老师.ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET WEB应用程序的一个框架. MVP专访人物介绍 衣明志,蝉联五届微软MVP,烟台.NET俱乐部主席,现主要从事.NET平台下的Web应用开发.解决方案.构架设计及技术培训等工作. 照片居中者为衣明志

浅谈ASP.NET MVC在前端开发中的局限性

ASP.NET MVC 如果你还没有接触过后端的MVC框架的话,不妨先看看下面这段ASP.NET MVC代码并且了解一下后端MVC的工 作原理.它摘自ASP.NET MVC教程中非常著名的项目MVC Music Store一段Controller组件代码: public class StoreManagerController : Controller { private MusicStoreEntities db = new MusicStoreEntities(); // GET: /Sto

.NET/ASP.NET MVC(模块化开发AraeRegistration)

阅读目录: 1.开篇介绍 2.AreaRegistration注册路由(传递路由上下文进行模块化注册) 1]开篇介绍 ASP.NET Routing 路由功能非常强大,设计的也很巧妙:如果说ASP.NETMVC是建立在ASP.NET之上还不如准确的说ASP.NETMVC是建立在Routing基础之上的,才使得Controller顺利被找到并且执行Action: 那么今天这篇文章是一个简短的介绍如何在ASP.NETMVC下进行很好的模块化开发,都知道ASP.NETMVC是分层架构中的UI层框架:而