zoukankan      html  css  js  c++  java
  • VS 2012 单元测试简单配置

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

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

    algs4.h

    int add(int a, int b)
    {
        return a+b;
    }
     
    int minus(int a, int b)
    {
        return a-b;
    }

    main.cpp

    #include "algs4.h"
     
    int main()
    {
        return 0;
    }

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


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


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


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

    #include "stdafx.h"
    #include "CppUnitTest.h"
    #include "algs4.h"
     
    using namespaceMicrosoft::VisualStudio::CppUnitTestFramework;
     
    namespace UnitTestAlgs4
    {               
        TEST_CLASS(UnitTest1)
        {
        public:
                     
            TEST_METHOD(TestMethod1)
            {
                //TODO: 在此输入测试代码
                Assert::AreEqual(20,add(10,10));
            }    
        };
    }
    

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


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


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

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

    algs4.h

    int add(int a, int b);
    int minus(int a, int b);

    algs4.cpp

    #include "algs4.h"
     
    int add(int a, int b)
    {
        return a+b;
    }
     
    int minus(int a, int b)
    {
        return a-b;
    }

    main.cpp与上面的一致。

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


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

    如E:VS2012Algorithms4Algorithms4Debug

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

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

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


  • 相关阅读:
    111
    关于Node.js中安装完express后不能使用express命令
    vscode tab转空格
    【终端使用】rm命令,删除文件获目录
    WebStorage是什么?
    Vue路由传参
    --save 和 --save-dev的区别
    第五篇,理解JS模块化编程思想
    第四篇,JavaScript面试题汇总
    第三篇,ajax 和 axios、fetch的区别
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3192041.html
Copyright © 2011-2022 走看看