我的TDD实践

发表于:2016-01-20来源:火龙果软件作者:史蒂芬King点击数: 标签:tdd
我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精的目的。

  写在前面:

  我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精的目的。

  UnitTest单元测试

  简介

  1. 单元测试

  1.1 定义:“单元测试”就是针对一个“工作单元”的测试,一般意义上来讲是针对一个基础类进行输入/输出测试。与之相关的是集成测试,验收测试等。这里指单纯意义上的“单元测试”。

  1.2 特征:

  与其他代码相隔离:单元测试只测试一件事,否则应该怀疑是否是测试内容有误。

  与其他开发人员隔离:保证最小化的变量影响单元测试,也就是控制变量法。逐渐形成了模拟框架以及依赖注入框架等辅助工具。

  有针对性:要做有意义的测试,保证完成那些功能或方法。

  可重复:单元测试的最大优势就是可重复,这也是持续集成的意义所在。

  可预测:单元测试保证的是---确定的输入得到肯定的输出。

  2. 涵盖内容

  2.1 单元测试框架(UnitTest):自从2005年TDD开始流行,框架和工具得到了迅猛的发展,这些框架允许定义测试代码,控制测试的执行,还提供了一个应用程序运行测试,并在成功完成测试套件中的每个测试后给出报告。

  2.2 模拟框架(Mock):为了仅测试一个方法而不对其他发展产生影响或者被影响,产生了Mock框架。通过模拟另一个类的代码来完成单元测试,同时又充分的隔离了另一个类的部分信息。

  2.3 注入框架(inject):为了充分隔离类内部使用的对象,一般采用构造注入的方式或者属性注入的方式,都是将外部初始化好的对象导入进测试类,以进行隔离。

  3. 工具比较

  3.1 单元测试工具

  3.1.1 NUnit:目前.net最流行的工具,由JUnit发展而来,简单易用。 官方网站

  3.1.2 MSTest: 也十分的强大,同时也被多种自动编译工具所支持,在VS2010中十分方便创建以及关联测试测试类,使用方便。

  这是两个比较主要的测试框架,NUnit更新比较慢,但是开源。两种工具语法标签上大同小异,也都支持“Setup”和“Teardown”方便初始化共享对象。

  3.2 模拟框架:

  3.2.1 Rhino Mock:免费,使用简单,功能强大。

  3.2.2 Type Mock:使用中间语言(IL)在运行时以模拟实现来代替实际实现。商业产品。模拟对象不需要从接口集成,可以模仿第三方类库。

  3.2.3 Moq:社区支持,功能强大,使用简单。Moq利用了lambda表达式。语法更具描述性。

  3.3 注入框架:

  3.3.1 Structure Map:开源容器框架,能够自动模拟容器。

  3.3.2 Unity:来自微软设计与实践群组。

  3.3.3 Autofac:允许不采用XML文件的情况下进行配置。

  “我的TDD实践”系列之TDD概念篇

  简介

  1. TDD概念

  TDD(Test-Driven Development, 测试驱动开发)已经成为现代软件开发中非常重要的概念之一。TDD以测试用例为指导要求开发人员,开发出符合测试用例的程序,然后通过测试用例对程序进行验收,这被叫做“测试先行的开发”。通过,一个很小范围的功能的开发---验收过程,增加软件的内部稳定性,从而在整体上保证了软件的健壮性。这是与传统软件开发流程所不同的地方,也是传统的软件开发所达不到的一种软件开发的“实践方式”。

  2. 发展历程

  2.1 瀑布开发之前:软件工程的发展初期,由于计算机资源等诸多限制,软件的规模很小,拥有设备的开发人员更多的趋向于“迭代”开发,独立完成功能,然后在逐步完善,这是一种早期的迭代开发。

  2.2 瀑布式开发: 随着计算机硬件的提高以及高级语言的出现,开发人员逐渐摆脱硬件的束缚,而逐渐使用高级语言的特性,提高了移植性。有了这些,为大型软件的开发奠定了基础。一般定义一个相对大规模的软件开发(2年或更多),需要经历的一般过程是: 项目启动---》需求分析---》架构设计---》代码设计---》测试---》交付

  缺点: 软件测试时间长,每个过程需等待其他过程完成之后才能进行(效率低),成本高,难度大,修改影响范围大。

  瀑布式开发就像三峡的船闸一样,每一步都只能等待上一步完成之后才能进行。

原文转自:http://www.uml.org.cn/Test/201308201.asp