什么是Googletest?
- 它是一个测试框架,即用于编写和运行单元测试的软件工具。
- 它是用于编写C++测试的库。
- 它基于xUnit体系结构,该体系结构是用于编程和自动执行测试用例的一组“框架”。
为什么选择Googletest?
- Googletest帮助我们编写更好的C++测试。
- 独立且可重复: Googletest通过在不同的对象上运行每个测试来隔离测试。
- 可移植且可重复使用:Googletest可在不同的Oses(Linux,Windows或Mac)上使用不同的编译器工作。
- 如果测试失败,则应提供有关该问题的尽可能多的信息。
命名法:
- TestSuite:用于对相关测试进行分组。
- TEST():它使用特定的输入值来执行特定的程序路径并验证结果。
基本概念:
- 断言:
- 用于检查条件是否为真的语句。
- 输出:成功,非致命故障或致命故障(中止当前函数)。
- 测试治具类别:
- 测试套件中需要共享公共对象和子例程的多个测试的集合。
在下面的行中, *表示多个字符,例如EQ / NE / LT / LE / GT / GE。
- ASSERT_ * :失败时生成致命失败,并立即中止当前函数。 (可能会跳过其后的清理代码,这可能会导致空间泄漏)。
- EXPECT_ *:生成非致命故障,不会终止当前函数。
- 例子:
- ASSERT_EQ,ASSERT_NE ,ASSERT_LT,ASSERT_GT,ASSERT_GE。
- EXPECT_WQ,EXPECT_NE,EXPECT_LT,EXPECT_GT,EXPECT_GE。
Fatal assertion | Nonfatal assertion | Verifies |
---|---|---|
ASSERT_TRUE (condition); | EXPECT_TRUE (condition); | condition is true |
ASSERT_FALSE (condition); | EXPECT_FALSE (condition); | condition is false |
ASSERT_STREQ(str1, str2); | EXPECT_STREQ(str1, str2); | the two string str1 and str2 have the same content |
ASSERT_STRNE(str1, str2); | EXPECT_STRNE(str1, str2); | the two strings str1 and str2 have different content |
ASSERT_STRCASEEQ(str1, str2); | EXPECT_STRCASEEQ(str1, str2); | the two string str1 and str2 have the same content, ignoring the case |
ASSERT_STRCASENE(str1, str2); | EXPECT_STRSTRCASENE(str1, str2); | the two strings str1 and str2 have different content, ignoring the case |
简单测试:
TEST() :
- 定义和命名测试函数的宏。
- 使用各种Googletest断言来检查值。
- 如果测试中的任何断言失败(致命或非致命),或者测试崩溃,则整个测试都会失败。否则,它将成功。
TEST(TestSuiteName, TestName) {
... test body ...
}
测试治具:
- 对多个测试使用相同的数据配置。
- 从:: testing :: Test派生一个类。从protected:开始它的主体,因为我们要从子类访问fixture成员。
- 如有必要,编写默认的构造函数或SetUp()。
- 如有必要,编写默认的析构函数或TearDown()。
- 使用TEST_F(),而不是TEST()。
TEST_F(TestFixtureName, TestName) {
... test body ...
}
调用测试:
- RUN_ALL_TESTS();
- 返回0:所有测试均成功。
- 返回1:否则。
例子:
阶乘函数:
int factorial(int n)
{
// If n < 1;
return -1;
// Else factorial = n!;
return factorial;
}
TEST(FactorialTest, FactorialOfZeroShouldBeOne)
{
ASSERT_EQ(1, factorial(0));
}
TEST(FactorialTest, FactorialOfPositiveNos)
{
ASSERT_EQ(1, factorial(1));
ASSERT_EQ(24, factorial(4));
ASSERT_EQ(120, factorial(5));
}
int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
命令行参数:
- 通过传递以下内容将输出转储为XML格式:
–gtest_output=”xml:report.xml”
- 如果要多次运行:
–gtest_repeat=2
- 调试器在失败时被调用:
–gtest_break_on_failure
- 并非所有测试都需要一直运行:
–gtest_filter=