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,并且该测试组中有两个测试用例 TestSampleOneTestSampleTwo

除了上面列举的几个测试宏,Google Test 还提供了很多其他的测试宏,这在后面的文章中会慢慢提到,我个人的学习风格是从最常用最基础的部分开始,然后再慢慢进入复杂内容,防止在一开始将自己吓跑。

05-01 11:36