VS 2012 单元测试简单配置

写算法时大多依靠简单输入验证,经常遇到小范围输入正常,大范围或特殊情况输入结果错误的问题。所以写程序之前最好先想好几个特殊用例来测试,以验证算法是否正确。单元测试就是个不错的工具,而VS 2012提供了很方便的单元测试功能。

首先创建需要测试的C++项目,如果已有项目,可以跳过这个步骤。然后新建两个文件algs4.h和main.cpp,代码如下:

algs4.h

 

[cpp][/cpp] view plaincopyprint?

  1. int add(int a, int b)
  2. {
  3.     return a+b;
  4. }
  5. int minus(int a, int b)
  6. {
  7.     return a-b;
  8. }

 

main.cpp

 

[cpp][/cpp] view plaincopyprint?

  1. #include “algs4.h”
  2. int main()
  3. {
  4.     return 0;
  5. }

 

待测试项目创建完成。接下来需要在当前解决方案中新建本机单元测试项目,如下图:

 

完成项目创建之后,为了让测试方法能够访问待测试的代码,需要在测试项目中添加待测试项目的引用。右击测试项目,在属性对话框里找到VC++目录->包含目录


 

编辑包含目录项,在弹出的对话框中添加待测试项目的文件目录:

 

完成后就可以在测试项目中引入待测试函数。简单的测试代码如下:

 

[cpp][/cpp] view plaincopyprint?

  1. #include “stdafx.h”
  2. #include “CppUnitTest.h”
  3. #include “algs4.h”
  4. using namespaceMicrosoft::VisualStudio::CppUnitTestFramework;
  5. namespace UnitTestAlgs4
  6. {
  7.     TEST_CLASS(UnitTest1)
  8.     {
  9.     public:
  10.         TEST_METHOD(TestMethod1)
  11.         {
  12.             //TODO: 在此输入测试代码
  13.             Assert::AreEqual(20,add(10,10));
  14.         }
  15.     };
  16. }

 

运行测试时,可以在菜单栏找到测试->运行->所有测试,或者直接右击,选择运行测试


 

测试结果可以在测试资源管理器中查看:

 

不过以上的配置只能测试头文件中的代码,而大多情况下头文件中并不包括函数的实现,这时,测试项目仅包含待测试项目的文件目录是不够的,还需要添加对.obj文件的引用。

假设待测试项目的文件及代码如下:

algs4.h

 

[cpp][/cpp] view plaincopyprint?

  1. int add(int a, int b);
  2. int minus(int a, int b);

 

algs4.cpp

 

[cpp][/cpp] view plaincopyprint?

  1. #include “algs4.h”
  2. int add(int a, int b)
  3. {
  4.     return a+b;
  5. }
  6. int minus(int a, int b)
  7. {
  8.     return a-b;
  9. }

 

main.cpp与上面的一致。

打开测试项目的属性对话框,修改链接器常规->附加库目录输入->附加依赖项两个属性:

 

附加库目录中添加待测试函数的.obj文件目录

如E:\VS2012\Algorithms4\Algorithms4\Debug

附加依赖项中仅添加待测试函数的.obj文件名,这里是algs4.obj。

设置好后就能够正常运行测试。

 

另外,在测试资源管理器中右击测试名,可以分析测试代码的覆盖率。由于当前测试代码没有添加对minus的测试,所以它的已覆盖率是0。覆盖率测试还可以测试条件语句等分支语句的覆盖情况。

标签