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