TEST 宏最基础使用
TEST
宏是 Google Test 最基础也是最简单的使用方式,具体用法如下:
TEST(TestGroupName, TestCaseName){
...
}
其主要有两个参数:
TestGroupName
:测试组名,一组测试案例的集合;TestCaseName
:测试案例名,这个名字必须 唯一,否则会编译报错;
这两个参数都需要遵循 大驼峰命名
规则,否则编译会报错。
下面是具体的实例:
#include "gtest/gtest.h"
TEST(NewTest, BasicUsing){
// 字符串对比
EXPECT_STREQ("string1", "string1"); // 期待字符串相等
EXPECT_STRNE("string1", "string2"); // 期待字符串不等
ASSERT_STRNE("string1", "string2"); // 期待字符串不等,否则抛出异常,后续不执行
ASSERT_STREQ("string3", "string3"); // 期待字符串相等,否则抛出异常,后续不执行
// 数值对比
EXPECT_EQ(10, 20); // 期待10=20
EXPECT_NE(10, 20); // 期待10!=20
EXPECT_EQ(1e-3, 0.001);
EXPECT_NE(1e-3, 0.001);
}
int main(int argc, char *argv[]){
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
上面的代码中出现了下面几个宏:
EXPECT_STREQ
:期待字符串相等,不等则失败;EXPECT_STRNE
:期待字符串不等,相等则失败;ASSERT_STRNE
:期待字符串不等,相等则失败,中断后续所有测试并返回;ASSERT_STREQ
:期待字符串相等,不等则失败,中断后续所有测试并返回;EXPECT_EQ
:期待数值相等,不等则失败;EXPECT_NE
:期待数值不等,相等则失败;
关于编译与构建可以参考之前的文章 Google Test 使用笔记(一)
【注】:如果需要对比两个字符串是否相等,一定要使用包含 _STR
的宏,否则永远都是相等的。
运行后可以看到以下输出:
(base) gaohao@gaohaos-MacBook-Pro google_test % ./run.sh
[100%] Built target demo
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from NewTest
[ RUN ] NewTest.BasicUsing
/Users/gaohao/Desktop/exercise/src/google_test/main.cpp:16: Failure
Expected equality of these values:
10
20
/Users/gaohao/Desktop/exercise/src/google_test/main.cpp:20: Failure
Expected: (1e-3) != (0.001), actual: 0.001 vs 0.001
[ FAILED ] NewTest.BasicUsing (0 ms)
[----------] 1 test from NewTest (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] NewTest.BasicUsing
1 FAILED TEST
上面的输出中包含了以下几个信息:
[----------] 1 test from NewTest
:检测到1个测试组名为NewTest
;/Users/gaohao/Desktop/exercise/src/google_test/main.cpp:16: Failure
:main.cpp文件中的第16行测试样本没有通过;/Users/gaohao/Desktop/exercise/src/google_test/main.cpp:20: Failure
:main.cpp文案中第20行测试样本没有通过;[ FAILED ] NewTest.BasicUsing (0 ms)
:测试组NewTest
的测试用例BasicUsing
没有通过测试;1 FAILED TEST
:有一个测试组没有完全通过;
那么如果想要定义一个测试组与多个测试用例就可以这样写:
TEST(NewTestGroup, TestSampleOne){
EXPECT_STREQ("string1", "string1");
ASSERT_STREQ("string3", "string3");
EXPECT_EQ(10, 20);
EXPECT_NE(1e-3, 0.001);
}
TEST(NewTestGroup, TestSampleTwo){
EXPECT_STRNE("string1", "string2");
ASSERT_STRNE("string1", "string2");
EXPECT_NE(10, 20); // 期待10!=20
EXPECT_EQ(1e-3, 0.001);
EXPECT_NE(1e-3, 0.001);
}
这样就定了测试组名为 NewTestGroup
,并且该测试组中有两个测试用例 TestSampleOne
,TestSampleTwo
除了上面列举的几个测试宏,Google Test 还提供了很多其他的测试宏,这在后面的文章中会慢慢提到,我个人的学习风格是从最常用最基础的部分开始,然后再慢慢进入复杂内容,防止在一开始将自己吓跑。