Googletest C++单元测试

googletest

googletest 是一个由 Google 的测试技术团队开发的测试框架,它考虑到了谷歌的特定需求和限制。无论你使用的是 Linux、Windows 还是 Mac,只要你编写 C++ 代码,googletest 都可以帮到你。它支持任何类型的测试,不只是单元测试。

googletest安装

#下载gtest,release-1.8.0
git clone https://github.com/google/googletest
# gtest编译
cd googletest
#生成Makefile文件(先安装cmake,brew install cmake),继续输入命令编译:
cmake CMakeLists.txt
#执行make,生成两个静态库:libgtest.a libgtest_main.a
make
#拷贝到系统目录,注意,如果下诉目录位置在不同版本位置有变动,用find . -name "libgtest*.a" 找到位置
sudo cp libgtest*.a  /usr/lib
sudo cp –a include/gtest/ /usr/include
定义测试函数

应用 googletest 编写单元测试时,使用 TEST() 宏来声明测试函数:

TEST(GlobalConfigurationTest, configurationDataTest) 

第一个参数是测试套件的名字,第二个参数是测试用例中测试的名字。这两个名字都必须是有效的 C++ 标识符,且它们都不应该包含下划线(_)。测试的 完整名字 由包含它的测试套件和它自己的独立名字组成。不同的测试套件中的测试可以具有相同的独立名字。

定义测试函数

gtest中,断言是用以检查条件是否为真。

ASSERT_* 版本的断言失败时会产生致命失败,并结束当前函数;
EXPECT_* 版本的断言失败时产生非致命失败,但不会中止当前函数。
信息输出

在gtest中,一个测试用例(test case)可以包含一个或多个测试。一个测试程序可以包含多个测试用例。
可以通过操作符”<<”将一些自定义的信息输出,如:

EXPECT_EQ(add(2,3),5) << "Error message ";
举个例子:
#include<gtest/gtest.h>
int add(int a,int b){
    return a+b;
}
TEST(testCase,test0){
    EXPECT_EQ(add(2,3),5) << "Error message ";
}
int main(int argc,char **argv){
    testing::InitGoogleTest(&argc,argv);
    return RUN_ALL_TESTS();
}

编译:

g++ -std=c++11 gtest.cpp -lgtest -lpthread -o gtest.out
./gtest.out
常见断言
致命断言 非致命断言 验证
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition 是 true
ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition 是 false
ASSERT_EQ(val1, val2); EXPECT_EQ(val1, val2); val1 == val2
ASSERT_NE(val1, val2); EXPECT_NE(val1, val2); val1 != val2
ASSERT_LT(val1, val2); EXPECT_LT(val1, val2); val1 < val2
ASSERT_LE(val1, val2); EXPECT_LE(val1, val2); val1 <= val2
ASSERT_GT(val1, val2); EXPECT_GT(val1, val2); val1 > val2
ASSERT_GE(val1, val2); EXPECT_GE(val1, val2); val1 >= val2
ASSERT_STREQ(str1, str2); EXPECT_STREQ(str1, str2); 两个 C 字符串具有相同的内容
ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); 两个 C 字符串具有不同的内容
ASSERT_STRCASEEQ(str1, str2); EXPECT_STRCASEEQ(str1, str2); 两个 C 字符串具有相同的内容,忽略大小写
ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); 两个 C 字符串具有不同的内容,忽略大小写
发布了78 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/104344242