白盒测试之gtest第一个demo

时间:2020-12-23 22:30:45

认识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 == || b == )
{
throw "don't do that";
}
int c = a % b;
if (c == )
return b;
return Foo(b, c);
} //判断是否为素数
bool IsPrime(int n)
{
if (n <= ) return false; if (n % == ) return n == ; for (int i = ; ; i += )
{
if (i > n/i) break; if (n % i == ) return false;
} return true;
}

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

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

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

白盒测试之gtest第一个demo

将gtest.lib库添加到工程:

白盒测试之gtest第一个demo

编写测试用例程序:

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

添加程序入口函数:

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

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

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

白盒测试之gtest第一个demo

四、分析测试结果:

先看第一条测试用例:

TEST(SumCase, SumTemp)
{
EXPECT_EQ(, add(,)); EXPECT_EQ(, add(,));
}

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

白盒测试之gtest第一个demo

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

五,总结:

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