本随笔很简单,不涉及mock和stub对象,而是只给出一个简单的利用Visual Studio单元测试框架的最简单例子。如果需要深入理解Unit Test的原理与艺术,请参考《The art of Unit testing:with examples in .NET》

1.首先要知道你要测试什么,Unit Test可以测试方法的输出是否符合预期,或者对没有输出的方法可以测试对对象状态造成的影响。

本例测试一个堆排序方法的正确性。

2.创建一个Unit Test工程,我们取名为GSUnitTest

3.创建完成之后,添加需要测试的类所在的工程的引用,本例为Sort

4.编写测试代码,把TestMethod的方法名改成UnitTest+要测试的方法名,改名不是必需的,但是可以使输出结果清楚的看到是在测试哪个方法。

5.运行Unit Test

6.得到结果如下:

是不是很简单?

如果项目开始的时候没有Unit Test,当进行了一段时间之后会发现原来写的代码完全是不可测的,原因是我们不能把要测试的方法独立出来测试。

并且如果我们的工程是多层结构的,那么不同类之间交互的接缝通常需要利用接口,基类等方法进行耦合隔离,然后注入stub对象或者mock一个对象来进行Unit Test的交互。

单元测试对于大型项目的结构优化是相当有益的。

另外在测试驱动开发中,Unit Test扮演这相当重要的角色,大致如下,可以看到Coding和Unit Testing是同时进行的,这也就为方法级的缺陷及早发现提供了方法。

而集成测试主要是测试模块之间的交互状况,UAT就是更多的表层UI测试了。所以UT,SIT,UAT分属于不同的测试层级,针对的缺陷对象是不同的。

下图取自这里

RA( Requirement Analysis)  & 
PSD ( Productive Specification Design)              UAT( User Acceptance Testing)
                          \                                                              /
                            \                                                          /
                              \                                                      /
FSD(Functional Specification Design)             SIT(System Integration Testing)
                                \                                                 / 
                                  \                                             /
                                    \                                         /
                           Construction(Coding)         UT(Unit Tesing)
                                         \                              / 
                                            \                         /
                                                \                   /
                                                  \              /
                                                     \         /
                                                        \    /
                                                          \/

作者:Andy Zeng

欢迎任何形式的转载,但请务必注明出处。

http://www.cnblogs.com/andyzeng/p/3773833.html

最新文章

  1. 异步编程系列06章 以Task为基础的异步模式(TAP)
  2. VSFTP安装
  3. C#中的yield return与Unity中的Coroutine(协程)(下)
  4. Java for LeetCode 039 Combination Sum
  5. android中控件公用产生的冲突的解决办法
  6. mysql允许远程IP访问
  7. java类集框架(ArrayList,LinkedList,Vector区别)
  8. Web API 路由 [二] Attribute Routing
  9. [Git]2018-10 解决git cmd中文乱码问题
  10. n&m位运算
  11. NIO 概述 与 通信实例
  12. JS 变量提升与函数提升
  13. php 按照中文字母名字排序,并把相应的头像显示出来
  14. <airsim文档学习> Street View Image, Pose, and 3D Cities Dataset
  15. vue中$set的用法
  16. Django中Session
  17. 【struts2】名为dispatcher的ResultType
  18. Android Progurad 代码混淆
  19. Oracle HA 之 SERVICE和DRM实战
  20. 将select的默认小三角替换成别的图片,且实现点击图片出现下拉框选择option

热门文章

  1. Beta发布 _thunder_文案+美工展示
  2. Task 6.4 冲刺Two之站立会议6
  3. Codeforces Round #157 (Div. 1) B. Little Elephant and Elections 数位dp+搜索
  4. windows下的C++ socket服务器(4)
  5. 关于javascript异步编程的理解
  6. week3b:个人博客作业
  7. 弹出提示框的方式——java
  8. 蜗牛慢慢爬 LeetCode 11. Container With Most Water [Difficulty: Medium]
  9. 10.13课堂Scrum站立会议
  10. PAT 1042 字符统计