一、相关概念
Levels of Testing:
Unit Test: Test Individual Component
Integration Test: Test Integrated Component
System Test: Test the entire System
Acceptance Test: Test the final System
gtest是google公司发布的一个跨平台(Liunx、Mac OS、Windows 等) 的C++单元测试框架,它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。
Test 使用断言来判断测试代码的行为:如果一个 Test 崩溃了或者出现了一个失败的断言,则该 Test 就失败了;反之,它就是成功的。
Test case (有的也叫Test suit) 包括一个或多个 Test。我们应当把 Test 打包、分组,放入 Test Case 中,以便测试代码的结构更加清晰。当一个 Test Case 中的多个 Test 需要共享对象和子程序时,我们可以把这些共享内容放入一个测试夹具(test fixture)类中。一个测试程序可以包含多个 Test Case。
两种断言:
- ASSERT_* :当断言失败时,产生致命错误,并终止当前函数;
- EXPECT_* :当断言失败时,产生非致命错误,并且不会终止当前函数。
通常,我们都会选择 EXPECT_*,因为它能让我们在一次测试中测试出更多的失败情况。不过,如果我们想要在出现失败的测试时立即终止程序,则要选择 ASSERT_*。
注意:因为 ASSERT_* 会在失败时立即终止函数,那么就可能跳过后面程序中进行清理工作的代码,由此可能会产生内存泄露。所以我们在使用 ASSERT_* 时,要留心检查堆内存,防止内存泄露。
基本断言
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(val1, val2); | EXPECT_EQ(val1, val2); | val1 == val2 |
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 |
EXPECT_FLOAT_EQ(val1, val2); |
||
EXPECT_DOUBLE_EQ(val1, val2); |
||