ASP.NET MVC3实战系列(二):面向接口编程,提高系统可测试性。

简介:

ASP.NET MVC 使用MVC的架构,其架构本身就使应用程序更易于测试,但这并不意味着可以随便写出易于测试的程序。我们都知道单元测试在系统开发有着很重要的作用。

我们来写这样的一个程序,系统获取某个坏男人的情人信息,然后发送给他老婆。

1. 建一个Lover的ASP.NET MVC3项目

image

我们需要1个实体类,存储男人,情人和老婆的信息。

image

 

然后我们需要一个LoverRepository来获取某个人的情人,这里就想成从数据库取数据。我们这里先返回固定的数据

image 

建一个HomeController, 代码如下

image

建立一个Index视图

image

建立一个Send 视图

image

F5运行

image

image

2. 重构这个小程序。

我们可以看到如果我们想测试HomeController里Send的这个Action,如果LoverRepository没有开发完或者出错,我们将无法测试

image

image

可以看到单元测试出错了。

image

那么我们如何来隔离LoveRepository呢?我们都知道面向接口编程可以提高系统的可测试性。

打开LoveRepository.cs, 右键重构为接口:

image

image

image

image

为了容易测试,我们把这个接口属性设为公有。

image

这时我们再自己可以实现一个FakeRepository继承ILoverRepository这个接口,这样就测试通过了。

image

但是这样有几个问题:

第一就是我们暴露了HomeController的repository的属性。

第二我们在类内部new了一个对象,假如我们这次是从数据库中得到Lovers,下次想从文件或者Web Service里去数据时,我们必须修改Controller里的代码。

第三我们需要自己写一个Fake类。

要想解决这些问题,下一节我们将讨论ASP.NET MVC3里如何使用IOC来解决对象的依赖问题。

 

最后,打个小广告:西安分公司急聘如下人员,有意者直接联系我,左边侧栏有我的联系方式,博客园招聘频道有详细描述 http://job.cnblogs.com/offer/13800/

基本要求: 
4年以上C#开发经验, .Net基础扎实,熟练使用.Net3.5新特性。 
精通ASP.NET Web开发。 
熟练使用WCF. 
熟练使用ORM,LINQ TO SQL /Entity Framework或者NHibernate. 
熟练使用JavaScript, JQuery. 
熟悉Web标准,熟悉HTML&CSS. 
熟悉SQL Server, 熟练掌握T-SQL,存储过程。 
英语读写熟练,可以看懂英文需求,可以和客户流畅的用英语文字沟通(MSN/Skype) 
良好的编码习惯。

熟悉下面任意一项优先: 
熟悉敏捷开发者优先 
英语听说熟练者优先 
熟悉ASP.NET MVC者优先。 
熟悉WPF者优先 
熟悉Silverlight优先 
有系统架构经验者优先,有单元测试或者TDD经验者优先。

本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2011/09/02/2163633.html如需转载请自行联系原作者


王德水

相关文章
|
2月前
|
监控 测试技术
如何进行系统压力测试?
【10月更文挑战第11天】如何进行系统压力测试?
121 34
|
2月前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
121 32
|
19天前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
36 3
|
28天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
3月前
|
Linux
kickstart自动安装系统 --DHCP 配置及测试
PXE+Kickstart自动安装系统需配置DHCP服务器分配IP。dhcpd.conf示例:设置更新样式、忽略客户端更新、指定下一服务器及启动文件。定义子网、网关、掩码、动态地址池并预留特定MAC地址。重启xinetd、NFS、DHCP服务,确保新服务器与Kickstart服务器在同一网络,避免误装其他机器。注意隔离测试网络以防干扰生产环境。
83 18
|
2月前
|
存储 Linux 网络安全
Kali 渗透测试:Meterpreter在Windows系统下的使用
Kali 渗透测试:Meterpreter在Windows系统下的使用
|
3月前
|
测试技术 UED 开发者
软件测试的艺术:从代码审查到用户反馈的全景探索在软件开发的宇宙中,测试是那颗确保星系正常运转的暗物质。它或许不总是站在聚光灯下,但无疑是支撑整个系统稳定性与可靠性的基石。《软件测试的艺术:从代码审查到用户反馈的全景探索》一文,旨在揭开软件测试这一神秘面纱,通过深入浅出的方式,引领读者穿梭于测试的各个环节,从细微处着眼,至宏观视角俯瞰,全方位解析如何打造无懈可击的软件产品。
本文以“软件测试的艺术”为核心,创新性地将技术深度与通俗易懂的语言风格相结合,绘制了一幅从代码审查到用户反馈全过程的测试蓝图。不同于常规摘要的枯燥概述,这里更像是一段旅程的预告片,承诺带领读者经历一场从微观世界到宏观视野的探索之旅,揭示每一个测试环节背后的哲学与实践智慧,让即便是非专业人士也能领略到软件测试的魅力所在,并从中获取实用的启示。
|
4月前
|
测试技术
探索软件测试的多维视角:从单元到系统,从静态到动态
【8月更文挑战第27天】本文将带领读者穿越软件测试的迷宫,从最微小的单元测试开始,逐步扩展到复杂的系统测试。我们将一起探索静态测试和动态测试的不同面貌,以及它们如何互补地确保软件质量。通过实际代码示例,我们将揭示测试用例的设计思路和执行过程,旨在为读者提供一个全面而深入的软件测试全景图。让我们开始这段旅程,解锁软件测试的秘密,确保我们的代码不仅能够运行,而且能够完美运行。
|
4月前
|
监控 网络协议 安全
在Linux中,如何进行系统性能的峰值测试?
在Linux中,如何进行系统性能的峰值测试?
|
4月前
|
存储 前端开发 数据库
神秘编程世界惊现强大架构!Web2py 的 MVC 究竟隐藏着怎样的神奇魔力?带你探索实际应用之谜!
【8月更文挑战第31天】在现代 Web 开发中,MVC(Model-View-Controller)架构被广泛应用,将应用程序分为模型、视图和控制器三个部分,有助于提高代码的可维护性、可扩展性和可测试性。Web2py 是一个采用 MVC 架构的 Python Web 框架,其中模型处理数据和业务逻辑,视图负责呈现数据给用户,控制器则协调模型和视图之间的交互。
40 0