sticky
Windows 单元测试入门一 RRS feed

  • 常规讨论

  • 一、单元测试简介
          在计算机编程中,单元测试(Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
          编写代码时,一定会反复调试保证它能够编译通过。代码通过编译,只是说明了它的语法正确,无法保证它的逻辑也一定正确,编写单元测试就是用来验证这段代码的行为。
          单元测试越早越好。先编写产品函数的框架,然后编写测试函数,针对产品函数的功能编写测试用例,然后编写产品函数的代码,每写一个功能点都运行测试,随时补充测试用例。所谓先编写产品函数的框架,是指先编写函数空的实现,有返回值的直接返回一个合适值,编译通过后再编写测试代码,这时,函数名、参数表、返回类型都应该确定下来了,所编写的测试代码以后需修改的可能性比较小。                   

    二、Visual Studio 2017单元测试工具
          VS2017常用的四种C++ 单元测试框架:
            a.Microsoft Unit Testing Framework for C++
            b.Google Test
            c.Boost.Test
            d.CTest
          除了这四种测试框架以外,你也可以编写自己的测试框架,或者去Visual Studio 商城下载第三方的测试框架安装到VS2017里面。关于如何安装这些第三方的单元测试框架,你可以参考这个链接

    三、单元测试的具体实现
          这里主要先介绍一下VS的微软C++单元测试框架的具体使用。
          1. 创建测试工程
              打开已有的解决方案(UnitTestShow)和项目(UnitTestDemo),右键点击解决方案,选中添加>新建项目。进入添加新建项目画面,选择Visual C++>测试>本机单元测试项目,如下图1所示:

       

          2. 关联工程
              在创建完单元测试工程之后,你需要将单元测试工程和其他的工程关联起来, 右键点击引用>添加应用,勾选项目 点击确定。如下图2所示:

         

               完成之后,当你打开单元测试工程中的unittest1.cpp时(名字可以自定义),当你添加#include指令时会自动弹  出文件夹和文件供你选择,双击选中要测试的文件夹和文件即可。

              

               到了这一步,基本上工程已经创建完毕了,接下来就是编写测试方法了。    

           3. Microsoft单元测试框架的语法
               Microsoft单元测试框架有着一整套的测试语法,至于相关的函数和宏的详细信息和使用方法,请参考这个链接

           4. 简单示例
               这里做了一个很简单的示例使用单元测试,代码里面主要定义了一个方法(add)和一个类(CTestClass)的成员方法(add2)。单元测试代码主要用来测试这两个方法,具体代码如下图所示:

               Assert::AreEqual 是断言测试,主要是用测试两个对象是否相等,测试代码中将实际得到的值和预期值进行对比,如果是相同的就说明代码运行没有出错。如果出错就会直接跳出这个方法,也就是说这行代码后的其他语句都不会执行。它会继续检测其他的方法。后面会有实例展示出错的情况。Logger::WriteMessage 可以用来打印一些日志,加入在代码中,运行测试后可以在输出窗口中看到具体的自定义日志。

           5. 执行测试
               写好了单元测试代码后要去执行。选中 测试>运行> 所有测试 即可,  执行测试之后, 会有测试结果产生, 主要体现在测试资源管理器和输出窗口中体现。
               测试资源管理器可以直接帮你了解哪个模块除了问题,然后在输出窗口的自定义日志中确认出现错误的位置。这样可以实现快速定位,从而直接去找到根本问题所在。执行测试以及测试结果如下图5所示:

               

               如果测试出现问题的话, 如下图6所示,这里我故意将预期结果和得到的实际结果显示不同。测试失败位置一目了然。

         

    四、遇到的问题与解决方法
          1. 关联项目时报错
          在关联项目时,遇到这样的情况:

         

          解决方法:
          找到Visual Studio 2017 开发命令行工具。进入已安装的vs2017的Microsoft VisualStudio\2017\Enterprise\Common7\IDE\PublicAssemblies文件夹,具体在位置取决于你的VS2017安装路径,我是在D盘中安装的,记住开发者命令行工具必须以管理员方式运行,否则无法执行下面的命令。然后再输入 gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll,具体情况如图8所示:

          

          解决方案参考这个链接
          
          2. 无法找到CppUnitTest.h
              一直显示找不到CppUnitTest.h 这个头文件,检查发现vs2017安装路径中是有这个文件的,尝试一些方法都没法解决,包括修改include路径和库的路径,采用全路径,重装VC工具等,猜测这里可能是由于本人电脑的原因, 最后重新安装了vs2017 community 版本,再次尝试就没有碰到这个问题了。错误情况如下图9所示:

          


    MSDN Community Support Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.











    2019年1月25日 6:08
    版主