本节我们将学习一些测试驱动开发环境的搭建,测试驱动开发概念和流程。所涉及的内容全部会以截图的形式贴出来,如果你也感兴趣,可以一步一步的跟着来做,如果你有任何问题,可以进行留言,我也会很高兴的为你答疑。

准备工具

Visual Studio(什么版本都无所谓),NUnit

安装NUnit

从NUnit官网下载最新版本的NUnit,地址为http://www.nunit.org/index.php?p=download,下载这个msi,然后进行安装,直接下一步搞定。

 

 

 

 

 

在项目引用NUnit

首先,在VS中新建项目==》添加项目==》在模板里选择其他项目类型==》VS解决方案==》空白解决方案,然后命名为MyFirstTdd,如下图。

然后,在新建的解决方案上面,新建项目,添加一个类库Tdd.TicTacToe.Model。

添加完成后,继续添加Tdd.TicTacToe.ModelTests类库。

在解决方案上面点击右键,会出现“在文件资源管理器中打开文件夹”,打开文件夹后,在文件夹里新建一个文件夹,命名为lib。然后从从开始安装NUnit的文件夹中,把nunit.framework.dll(找到你刚刚安装NUnit的目录,我的是在C:\Program Files (x86)\NUnit 2.6.4\bin\framework文件夹里),复制到刚才新建的lib文件夹里。

继续在VS右键==》添加==》新建解决方案文件夹,命名为lib,在lib解决方案文件夹里添加现有项,把刚刚lib文件夹里的nunit.framework.dll给添加上。

Tdd.TicTacToe.ModelTests的引用上面右键,添加刚刚的unit.framework.dll和对Tdd.TicTacToe.Model的引用。

OK,到这一步,那整个NUnit的引用已经全部完成了,如果你的解决方案是和我下面的一样,那么恭喜你,可以进入下一步了,如果不一样,请检查你的步骤,有什么问题可以留言。

TDD的基础知识

现在我们在使用TDD之前,我们对TDD的一些基础知识和流程进行了解。

3A模板

3A模板类似管理学中的PDCA的管理思想一样,做事之前,先进行准备好测试的环境(Arrange),对所准备好的测试的方法进行执行(Act),对测试结果和原计划的结果进行比较,看是否一致(Assert).

Assert静态方法

我记得当初看C#书籍的时候,看到过Assert这个单词,可是从来都没有用户,那现在你终于有机会用到这个单词了,而且它还有很多静态方法,大家先了解一下。

测试驱动开发流程

论语·学而》里有这么一句话,“吾日三省吾身,为人谋而不忠乎?与朋友交而不信乎?传不习乎?”,大白话就是“我每天多次反省自己的言行,替人家谋划的事不尽心尽力吗?和朋友交往不诚心诚意吗?传授给别人的道理有没有那样去做呢?”,对TDD也是这样,每次测试的时候,你都要考虑,如何让你的程序错的给改正确,正确的考虑还能不能更好。

 

写第一个TDD测试程序

在Tdd.TicTacToe.ModelTests里添加一个类,命名为SimpleTest,然后添加下面的代码定义。

保存后,在Tdd.TicTacToe.ModelTests右键重新编译,然后再开始菜单里打开刚刚安装的NUnit,文件==》打开项目,找到编译好的Tdd.TicTacToe.ModelTests.dll,我的是在MyFirstTdd\Tdd.TicTacToe.ModelTests\bin\Debug文件夹下。加载后,进行Run一下,然后你就会看到红红的叉叉,测试没通过,你知道原因了没。

看看提示

Tdd.TicTacToe.ModelTests.SimpleTest.My_First_NUnit_Test:
  Expected: 3
  But was:  4

预期为结果为3,实际得到的结果为4,所以这个时候我们回去修改一下我们的程序,把3+1改成2+1,或者改成1+2,3+0,重新生成,重新Run一下,恭喜你,变为全绿了,成功了。

 

 

今天就写这些,这个系列我还会继续写下去,接下来,我会用TDD来完整的开发一个完整的小游戏,以便大家能更深刻的理解TDD的开发模式,敬请期待,如果你觉得我这篇文章写得好,请点击推荐按钮推荐一下吧。

TDD(测试驱动开发)学习二:创建第一个TDD程序的更多相关文章

  1. TDD(测试驱动开发)学习一:初识TDD

    首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一 ...

  2. 测试驱动开发学习笔记(UTDD)

    title: 测试驱动开发学习笔记(UTDD) date: 2020-08-01 23:59:17 tags: [2020, 学习一门技能, TDD, DevOps] What TDD(Test-Dr ...

  3. TDD(测试驱动开发)培训录

    2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都是复杂问题,改变人,改变一个组 ...

  4. TDD(测试驱动开发)培训录(转)

    本文转载自:http://www.cnblogs.com/whitewolf/p/4205761.html 最近也在了解TDD,发现这篇文章不错,特此转载一下. TDD(测试驱动开发)培训录 2015 ...

  5. TDD(测试驱动开发)

    TDD(测试驱动开发)培训录 2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都 ...

  6. Windows Azure入门教学系列 (一): 创建第一个WebRole程序

    原文 Windows Azure入门教学系列 (一): 创建第一个WebRole程序 在第一篇教学中,我们将学习如何在Visual Studio 2008 SP1中创建一个WebRole程序(C#语言 ...

  7. “全栈2019”Java第四章:创建第一个Java程序

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. CodeBlocks环境搭建及创建第一个C++程序

    某业界大牛推荐最佳的途径是从raytracing入门,所以本屌开始学习<Ray Tracing In One Weekend>. 该书是基于C++的.本屌从未学过C++.感觉告诉我,要先搭 ...

  9. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

随机推荐

  1. Mysql 5.6 新特性

    随笔,真的随笔,以后理解得更深了再修改.   Index Condition Pushdown 更多的让存储引擎去处理Where语句中的条款,避免返回无关字段数据等:   Multi-Range Re ...

  2. XML数组和对象,反之亦然

    惊人的互相转换,还是因为麻烦.程序很反感麻烦猿 1 阵转xml <?php /* 一维数组转xml 思路: 循环数组每一个单元,添加到xml文档节点中去 */ /* $arr = array( ...

  3. thinkphp3.2 代码生成并点击验证码

    本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...

  4. 前端project师的修真秘籍(css、javascript和其他)

    以我的经验,大部分技术,熟读下列四类书籍就可以. 入门,用浅显的语言和方式讲述正确的道理和方法,如head first系列 全面,巨细无遗地探讨每一个细节,遇到疑难问题时往往能够在这里得到理论解答,如 ...

  5. AndroidSlidingUpPanel 使用控制和简单的分析方法

    滑 - 向上的时间可以飞起来控件的显示区域.分类似至play music有效. 该控件在主界面中有一个例如以下图红色箭头所指的底部触发区域: 该区域点击的时候被隐藏在下方的内容将网上漂移到顶部,直到被 ...

  6. 鸟哥Linux私房菜 基础学习篇读书笔记(10):Linux磁盘和文件系统管理(3)

    本文总结了Linux操作系统来管理我们的硬盘和文件系统需要使用命令.当我们在系统中增加一个硬盘驱动器.什么是我们需要去通过这个硬盘就可以真正使用步骤?下面步骤: (1)对磁盘进行分区,新建能够使用的分 ...

  7. Git常用操作汇总(转)

    如果一个文件被删除了,可以使用切换版本号进行恢复.恢复方法: 先确定需要恢复的文件要恢复成哪一个历史版本(commit),假设那个版本号是: commit_id,那么 git checkout com ...

  8. svn常见错误汇总

    comment中的换行.把换行去掉就可以了

  9. jdk和cglib简单理解(转)

    之前使用cglib的时候不需要将classLoader作为参数传入,但动态代理却要,带着这个疑惑进入这个方法: Proxy.newProxyInstance(classLoader, interfac ...

  10. Android内置下拉刷新组件SwipeRefreshLayout

    也许下拉刷新之前,你可能会使用一些第三方的开源库,例如PullToRefresh, ActionBar-PullToRefresh等待,但现在有的正式组成部分---SwipeRefreshLayout ...