• 白盒测试之gtest第一个demo


    认识gtest工具后,关于它的使用,下面将用一个demo程序演示一下gtest的用法以及成果展示。

    一、需要测试的C++代码:

    #include "myfunction.h"
    
    //计算和的函数
    int add(int a, int b)
    {
        int c = a + b;
    
        return c;
    }
    
    //计算最小公约数
    int Foo(int a, int b)
    {
        if (a == 0 || b == 0)
        {
            throw "don't do that";
        }
        int c = a % b;
        if (c == 0)
            return b;
        return Foo(b, c);
    }
    
    //判断是否为素数
    bool IsPrime(int n)
    {
        if (n <= 1) return false;
    
        if (n % 2 == 0) return n == 2;
    
        for (int i = 3; ; i += 2)
        {
            if (i > n/i) break;
    
            if (n % i == 0) return false;
        }
    
        return true;
    }

    该C++文件中包含了3个功能函数,计算和的函数,计算最小公约数的函数,判断素数的函数。下面我将建一个功能对该功能函数进行单元测试。

    二、使用gtest库创建单元测试工程:

    创建一个C++控制台下程序,将gtest的头文件和库的目录在编译器中设置好:

    将gtest.lib库添加到工程:

    编写测试用例程序:

    #ifndef __TEST_CASE__
    #define __TEST_CASE__
    
    #include <gtest/gtest.h>
    #include "myfunction.h"
    //#include <list>
    
    
    TEST(SumCase, SumTemp)
    {
        EXPECT_EQ(3, add(1,2));
    
        EXPECT_EQ(5, add(1,2));
    }
    
    TEST(FooCase, FooTemp)
    {
        EXPECT_EQ(3, Foo(6,2));
    
        EXPECT_EQ(3, Foo(6,3));
    }
    
    TEST(IsPrimeCase, IsPrimeTemp)
    {
        EXPECT_TRUE(IsPrime(2));
    
        EXPECT_TRUE(IsPrime(3));
    
        EXPECT_TRUE(IsPrime(6));
    }
    
    #endif //__TEST_CASE__

    添加程序入口函数:

    #include <tchar.h> 
    #include "testcase.h"
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        testing::InitGoogleTest(&argc, argv);
    
        return RUN_ALL_TESTS();
    }

    到此时,代码已经完成,且编译通过。

    三、执行测试程序,查看测试结果:

    四、分析测试结果:

    先看第一条测试用例:

    TEST(SumCase, SumTemp)
    {
        EXPECT_EQ(3, add(1,2));
    
        EXPECT_EQ(5, add(1,2));
    }

    add(1,2)的结果应该是3,而不是5。对应的测试结果:

    第二行代码,add(1,2)的期望值是5,实际值应该是3,所以测试结果已经清楚的列出期望值与实际值。所以执行失败,且已经用红色的字符提示。其他的测试用例结果,可以参照查看。

    五,总结:

    通过该demo程序,可以简单的了解gtest的用法。关于gtest的强大之处,此文并没有展现出来。gtest有很多断言机制、事件机制等,极大的增加了gtest的单元测试中的灵活和强大之处。gtest还有一个好处是完全开源,所有感兴趣的同学可以下载源码深入研究,肯定会有更大的收获。

  • 相关阅读:
    CRMEB系统开发文档
    R语言︱LDA主题模型——最优主题...
    2018前端面试及答案
    开发流程
    uitramon 安装包
    scrapy 爬取时很多重复 及日志输出
    fake-useragent插件无法正常使用的问题
    区块链共识机制(一)
    Python Twisted 之 Deferred
    区块链的三大分支:公有链、联盟链和私有链
  • 原文地址:https://www.cnblogs.com/peisy/p/4331858.html
Copyright © 2020-2023  润新知