白盒测试之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还有一个好处是完全开源,所有感兴趣的同学可以下载源码深入研究,肯定会有更大的收获。

posted @ 2015-03-12 11:06  Peisy  阅读(1770)  评论(0编辑  收藏  举报