GoogleTest是一款由Google开发的C++测试框架,具有快速、简洁、可靠、跨平台等优点,可以帮助C++开发人员更好的测试代码。
GoogleTest测试框架使用
使用前请添加#include <gtest/gtest.h>
assertion(断言)的使用中分别有EXPECT_
和ASSERT_
的变体形式,两者的区别在于当代码测试失败时,EXPECT_
生成非致命失败,并允许当前函数继续运行,而ASSERT_
生成致命失败,并终止当前函数。此外,所有断言都支持通过“<<”操作符自定义失败提示信息,如下所示,“<<”操作符的使用类似于"cout<<"输出控制台相关信息。
// 任何可以流入ostream 的内容都可以流入断言宏中,直接类比cout的使用即可 |
Boolean Conditions(bool类型判断)
本部分的断言可以测试bool类型的条件
EXPECT_FALSE( condition )
ASSERT_FALSE( condition )
用来验证condition是否为假。
EXPECT_TRUE( condition )
ASSERT_TRUE( condition )
用来验证condition是否为真。
Binary Comparison(值比较)
本部分断言用来比较两个值,值也可以是string类型。
EXPECT_EQ( val1 , val2 )
ASSERT_EQ( val1 , val2 )
用来验证val1和val2是否相等。
EXPECT_NE( val1 , val2 )
ASSERT_NE( val1 , val2 )
用来验证val1和val2是否不相等。
EXPECT_LT( val1 , val2 )
ASSERT_LT( val1 , val2 )
用来验证val1< val2是否成立。
EXPECT_LE( val1 , val2 )
ASSERT_LE( val1 , val2 )
用来验证val1<= val2是否成立。
EXPECT_GT( val1 , val2 )
ASSERT_GT( val1 , val2 )
用来验证val1> val2是否成立。
EXPECT_GE( val1 , val2 )
ASSERT_GE( val1 , val2 )
用来验证val1>= val2是否成立。
String Comparison(字符串比较)
本部分断言用来比较两个C strings,如果比较两个string对象,请使用EXPECT_EQ和EXPECT_NE。C strings是字符数组的形式,string是C++标准库提供的字符串类。
EXPECT_STREQ( str1 , str2 )
ASSERT_STREQ( str1 , str2 )
用来验证两个C strings是否有相同的内容。
EXPECT_STRNE( str1 , str2 )
ASSERT_STRNE( str1 , str2 )
用来验证两个C strings是否有不同的内容。
EXPECT_STRCASEEQ( str1 , str2 )
ASSERT_STRCASEEQ( str1 , str2 )
用来验证两个C strings是否有相同的内容,忽略大小写。
EXPECT_STRCASENE( str1 , str2 )
ASSERT_STRCASENE( str1 , str2 )
用来验证两个C strings是否有不同的内容,忽略大小写。
Floating_Point Comparison(浮点型数值比较)
需注意的是浮点型数值存在舍入误差,无法被精确表示,因此两浮点型数值相等的情况十分罕见,使用时需仔细选择误差范围,GoogleTest提供的误差范围是基于ULPs的,1个ULP表示两个连续的浮点数之间的最小距离,取决于浮点数的精度。
EXPECT_FLOAT_EQ( val1 , val2 )
ASSERT_FLOAT_EQ( val1 , val2 )
用来验证浮点型数值val1和val2是否近似相等(4个ULPS)。
EXPECT_DOUBLE_EQ( val1 , val2 )
ASSERT_DOUBLE_EQ( val1 , val2 )
用来验证double数值val1和val2是否近似相等(4个ULPS)。
EXPECT_NEAR( val1 , val2 , abs_error )
ASSERT_NEAR( val1 , val2 , abs_error )
用来验证数值val1和val2的差值没有超过绝对误差abs_error。
Exception Assertions(异常抛出检测)
本部分用来验证代码片段是否抛出异常,被测试的代码片段可以是复合语句,如下:
EXPECT_NO_THROW({ |
EXPECT_THROW( statement , exception_type )
ASSERT_THROW( statement , exception_type )
用来验证某个语句(statement)是否抛出指定类型(exception_type)的异常。
EXPECT_ANY_THROW( statement )
ASSERT_ANY_THROW( statement )
用来验证某个语句(statement)是否抛出任何类型的异常。
EXPECT_NO_THROW( statement )
ASSERT_NO_THROW( statement )
用来验证某个语句(statement)是否没有抛出任何类型的异常。
测试示例(vs2022)
1、使用TEST()宏来定义和命名一个测试函数,这些都是普通的C++函数,不返回值。
2、在这个测试函数中,除了任何你想包含的有效的C++语句之外,还可以使用各种GoogleTest的断言来检查值。
TEST(TestSuiteName, TestName) { |
TEST()中参数TestSuiteName表示测试套件的名称,TestName表示测试套件中的测试名称,这两个参数名称必须是有效的C++标识符,并且它们不应该包含任何下划线(_)。测试的完整名称包括其所属的测试套件和其具体的测试名称,来自不同测试套件的测试可以具有相同的名称。
GoogleTest按测试套件对测试结果进行分组,因此逻辑相关的测试应该放在同一个测试套件中;换句话说,它们的TEST()的第一个参数应该是相同的。
首先新建一个GoogleTest项目,测试项目配置按照默认即可。
可以同时编写多个测试名称的函数
pch.cpp
|
test.cpp
|
- 本文作者: hzr
- 本文链接: https://HZR0709.github.io/2024/06/27/Google-Test/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!