google test入门教程

编译配置 google test

https://code.google.com/p/googletest/ 上下载最新的google test源代码,
打开代码目录下的msvc目录,编译gtest.sln,生成gtest.lib。

当你使用gtest的时候,需要链接gtest.lib,还需要把gtest的头文件目录GTEST_ROOT/include 这个目录加入到工程的搜索路径中。最后是 #include <gtest/gtest.h>

最简单的例子

从main开始

InitGoogleTest

testing::InitGoogleTest()是一个解析命令行中gtest标识的函数,解析完后会移除所有认识的标识。这允许用户通过一些标识来控制测试函数的行为。必须在RUN_ALL_TESTS()之前调用这个函数,否则标识不能正常的初始化。

在windows下面,InitGoogleTest也能在宽字符的环境下工作,所以程序可以编译成unicode版本。

RUN_ALL_TESTS

我们需要调用RUN_ALL_TESTS宏来运行所有的测试。当所有测试都成功的时候它返回0,否则为1。

创建测试

      1. 使用TEST()宏来创建一个测试函数,它们是一个没有返回值的普通函数
      2. 在这个函数体里面用gtest断言来检查被测试语句的值


TEST宏的第一个参数是test case名,第二参数是在test case中test名。

断言

我们都是从使用断言开始google test。google test的断言都是一些行为像函数的宏,测试一个语句的条件是否为真。一个断言的结果可能是成功、非致命错误、致命错误。ASSERT_*断言失败会产生致命错误,EXPECT_*断言失败会产生非致命错误。如果发生了致命错误就会在当前函数立马中断返回,否则程序将继续执行下去。

      • 注意ASSERT_*断言失败后立马返回,跳过后面的清理代码,这可能导致资源的泄露。

基本断言

下面的断言做最基本的 true/false 条件测试

Fatal assertion Nonfatal assertion Verifies
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true
ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition is false

二进制比较断言

下面的断言都是比较两个值,当断言失败的时候,google test会打印出val1和val2。

Fatal assertion Nonfatal assertion Verifies
ASSERT_EQ(expected, actual); EXPECT_EQ(expected, actual); expected == actual
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_EQ和EXPECT_EQ比较两个指针的时候,都是比较它们的地址而不是指针所指向的值。不能用这种方法来比较c风格的字符串。

字符串比较断言

这些都是比较c风格的字符串,如果要比较string,请使用EXPECT_EQ, EXPECT_NE等代替。

*STREQ*和*STRNE*还接受宽字符串wchar_t*

空指针NULL和空字符串被当成不是不同的。

Fatal assertion Nonfatal assertion Verifies
ASSERT_STREQ(expected_str, actual_str); EXPECT_STREQ(expected_str, actual_str); the two C strings have the same content
ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); the two C strings have different content
ASSERT_STRCASEEQ(expected_str, actual_str); EXPECT_STRCASEEQ(expected_str, actual_str); the two C strings have the same content, ignoring case
ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); the two C strings have different content, ignoring case

输出自己的额外的错误信息

你可以用宏重载的<<来输出自定义的错误信息,例如下面:

所有能被ostream输出的内容都可以输出,比如c风格的字符串、string对象,还有wchar_t* 和TCHAR*。

发表评论

电子邮件地址不会被公开。 必填项已用*标注