Visual Studio C++单元测试总结——3种方法可用

转自:http://blog.csdn.net/u013299585/article/details/73662526

VS中有个非常有用的功能,单元测试。通过单元测试,开发人员和测试人员可以快速的检查C#,.net和c++项目中各个类的方法中是否有逻辑错误。单元测试仅仅需要创建一次,那么在每次更改源代码时候运行,以确保不引入bug。 
   
  对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里或C++里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。 
   
  

对于生成.exe文件的单元测试

  经过多方面查找资料,以及询问同学,发现有三种单元测试的方法。下面一一介绍。 
   
  第一种方法: 
  首先创建在你需要测试的解决方案树上创建一个Unit Test Project。 
  如图所示: 
  Visual Studio C++单元测试总结——3种方法可用_第1张图片
  如图所示,创建单元测试项目 
  Visual Studio C++单元测试总结——3种方法可用_第2张图片
  这时会自动帮我们创建一个unittest1.cpp并生成部分初始代码 
  Visual Studio C++单元测试总结——3种方法可用_第3张图片 
  箭头指向的文件,就是需要写单元测试用例代码的地方。 
Visual Studio C++单元测试总结——3种方法可用_第4张图片
 例如我写的例子 
Visual Studio C++单元测试总结——3种方法可用_第5张图片  
然后可以使用下面的方法对这些单元测试进行运行 
Visual Studio C++单元测试总结——3种方法可用_第6张图片

 那么将会运行你的所有测试用例。 
如果运行成功的话,则会出现Test explore窗口。如下图 
Visual Studio C++单元测试总结——3种方法可用_第7张图片

请注意,此处比较关键如果没有设置相关项目,那么会出错的 错误截图如下 
Visual Studio C++单元测试总结——3种方法可用_第8张图片
  
 此时说明你没有配置单元测试的外部依赖项,如下图 
 Visual Studio C++单元测试总结——3种方法可用_第9张图片
  
 此外还需要配置单元测试的关联 
 Visual Studio C++单元测试总结——3种方法可用_第10张图片

 选择要关联的单元测试 
 Visual Studio C++单元测试总结——3种方法可用_第11张图片

 完美

  第二种方法: 
  第二种方法和第一种方法所有的配置都一样,仅仅是单元测试的方式不同,并且单元测试代码的结构也不同。第一种方法创建的是Unit Test Project。而第二种方法,创建的是Managed Test Project,如下图所示。 
  Visual Studio C++单元测试总结——3种方法可用_第12张图片

 该单元测试的代码格式为 
Visual Studio C++单元测试总结——3种方法可用_第13张图片

 其他配置和用法与第一种方法相同。请参考第一种方法。

两种方法都可以进行单元测试,但是他们是有差别的。 
其实这两个工程都可用来进行单元测试,Managed Test Project提供了更全面的功能,如对类的开始初始化和结束销毁的处理,每个测试方法前后进行初始化和销毁处理等。而Unit Test Project相当于是对Managed Test Project的一种封装,只提供最简单、最常用的测试功能,而帮我们默认处理很多繁琐的工作

  第三种方法: 
  使用Test Genertater NUnit Extension插件,这个插件使单元测试更加简化。该插件可在tools 扩展和更新里面下载。 
  但是该插件有个很大的弊端,就是仅仅对于Visual Studio Enterprise版提供支持,其他的版本不支持。 
  官方的使用方法说明 
  一个较好的使用教程

附:常用的Assert用法 
1.3常用的Assert用法 
Assert.Inconclusive() 表示一个未验证的测试;

Assert.AreEqual() 测试指定的值是否相等,如果相等,则测试通过;

AreSame() 用于验证指定的两个对象变量是指向相同的对象,否则认为是错误

AreNotSame() 用于验证指定的两个对象变量是指向不同的对象,否则认为是错误

Assert.IsTrue() 测试指定的条件是否为True,如果为True,则测试通过;

Assert.IsFalse() 测试指定的条件是否为False,如果为False,则测试通过;

Assert.IsNull() 测试指定的对象是否为空引用,如果为空,则测试通过;

Assert.IsNotNull() 测试指定的对象是否为非空,如果不为空,则测试通过;

对于动态链接库的单元测试

上面的方法 只 能应用在生成.exe的项目,但是如果想测试动态库的情况就需要一些改动。 
其他的步骤基本相同,不同的是,在测试单元中不需要配置外部依赖项, 
只需要关联你将要测试的项目。 
Visual Studio C++单元测试总结——3种方法可用_第14张图片

Visual Studio C++单元测试总结——3种方法可用_第15张图片

要做的工作只是正确生成动态链接库 
这里大致介绍一下。 
一般为了保护自己代码,一般需要额外加一个接口,通过接口来访问你设计类的成员函数,相比原来的项目,多加了三个文件,如下图所示。 
Visual Studio C++单元测试总结——3种方法可用_第16张图片 
这三个文件就是添加的接口,接口的实现,以及生成动态链接库的设置函数。这三个文件如下所示。 
Visual Studio C++单元测试总结——3种方法可用_第17张图片

Visual Studio C++单元测试总结——3种方法可用_第18张图片

Visual Studio C++单元测试总结——3种方法可用_第19张图片

此外还需要设置一个地方,如下图所示。 
否则会报错 
Visual Studio C++单元测试总结——3种方法可用_第20张图片



你可能感兴趣的:(c/c++)