Google Test

概述

测试用例工作空间独立,在 CaseA 中给成员变量赋值无法在 CaseB 中访问,使用TEST_F尤其需要注意这个特点。

TEST常用于测试互相独立的单个方法。
TEST_F常用于测试几个测试用例依赖同一份数据的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* 使用 TEST 的例子 */
#include "utils.h"

#include <gtest/gtest.h>

using namespace utils;

TEST(UtilsTest, SplitString1)
{
// 独立的方法
}

TEST(UtilsTest, SplitString2)
{
// 独立的方法
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/* 使用 TEST_F 的例子 */
#include "foo.h"

#include <gtest/gtest.h>

class FooTest : public testing::Test
{
public:
FooTest();
~FooTest() override;

static void SetUpTestCase();
static void TearDownTestCase();

protected:
void SetUp() override;
void TearDown() override;

protected:
Foo *m_foo = nullptr;
};

FooTest::FooTest()
: m_foo(new Foo)
{
// 构造成员
}

FooTest::~FooTest()
{
// 析构成员
delete m_foo;
}

void MifDataLoaderTest::SetUpTestCase()
{
// Called before first test case
}

void MifDataLoaderTest::TearDownTestCase()
{
// Called after last test case
}

void FooTest::SetUp()
{
// Called before each test case
}

void FooTest::TearDown()
{
// Called after each test case
}

TEST_F(FooTest, Api1)
{
// test case
}

TEST_F(FooTest, Api2)
{
// test case
}

断言

gtest 中,断言的宏可以理解为分为两类,一类是 ASSERT 系列,一类是 EXPECT 系列。

  1. ASSERT_*系列的断言,当检查点失败时,退出当前函数(注意:并非退出当前案例)。
  2. EXPECT_*系列的断言,当检查点失败时,继续往下执行。

布尔值检查

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

数值型数据检查

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

字符串检查

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

Reference


Google Test
https://laplac2.github.io/tools/gtest/
作者
Laplace
发布于
2021年12月1日
许可协议