当前位置:   article > 正文

C++ googletest的使用_google test要求c++版本吗

google test要求c++版本吗

概念介绍

什么是gtest


gtest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++单元测试框架,由google公司发布。gtest是为在不同平台上为编写C++测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。

TEST宏

  1. TEST(test_case_name, test_name)
  2. TEST_F(test_fixture,test_name) //多个测试场景需要相同数据配置的情况,用TEST_F。TEST_F test fixture,测试夹具,测试套,承担了一个注册的功能。

EST宏的作用是创建一个简单测试,它定义了一个测试函数,在这个函数里可以使用任何C++代码并使用提供的断言来进行检查。

断言

要测试一个类或函数,我们需要对其行为做出断言。当一个断言失败时,Google Test会在屏幕上输出该代码所在的源文件及其所在的位置行号,以及错误信息。也可以在编写断言时,提供一个自定义的错误信息,这个信息在失败时会被附加在Google Test的错误信息之后。

GoogleTest的断言是一种类似于函数调用的断言机制。我们可以在GoogleTest本身的断言消息后面定义自己的测试失败信息。下面说明几种不同断言方式:

ASSERT_*产生fatal failures,直接终止当前函数的运行
EXPECT_*: 产生nonfatal failures,不会终止当前函数运行
EXPECT_*: 最常用的一种方式,可以允许报告产生一个或者多个failer

即,ASSERT_*版本的断言失败时会产生致命失败,并结束当前函数。EXPECT_*版本的断言产生非致命失败,而不会中止当前函数。通常更推荐使用EXPECT_*断言,因为它们运行一个测试中可以有不止一个的错误被报告出来。但如果在编写断言如果失败,就没有必要继续往下执行的测试时,你应该使用ASSERT_*断言。 因为失败的ASSERT_*断言会立刻从当前的函数返回,可能会跳过其后的一些的清洁代码,这样也许会导致空间泄漏。

常用的断言类型

  1. bool值检查
  2. 1>、 ASSERT_TRUE(参数),期待结果是true
  3. 2>、ASSERT_FALSE(参数),期待结果是false
  4. 数值型数据检查
  5. 3>、ASSERT_EQ(参数1,参数2),传入的是需要比较的两个数 equal
  6. 4>、ASSERT_NE(参数1,参数2),not equal,不等于才返回true
  7. 5>、ASSERT_LT(参数1,参数2),less than,小于才返回true
  8. 6>、ASSERT_GT(参数1,参数2),greater than,大于才返回true
  9. 7>、ASSERT_LE(参数1,参数2),less equal,小于等于才返回true
  10. 8>、ASSERT_GE(参数1,参数2),greater equal,大于等于才返回true
  11. 字符串检查
  12. 9>、ASSERT_STREQ(expected_str, actual_str),两个C风格的字符串相等才正确返回
  13. 10>、ASSERT_STRNE(str1, str2),两个C风格的字符串不相等时才正确返回
  14. 11>、ASSERT_STRCASEEQ(expected_str, actual_str)
  15. 12>、ASSERT_STRCASENE(str1, str2)

注:以上ASSERT_关键字替换为EXPECT_即为EXPECT_系列宏,同样可以使用。

断言补充日志

如果你对自动输出的错误信息不满意的话,也是可以通过operator<<能够在失败的时候打印日志,将一些自定义的信息输出。如下:

  1. ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";
  2. for (int i = 0; i < x.size(); ++i) {
  3. EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
  4. }

注意,任何可以写入流ostream的,都可被写入断言宏,比如C的字符串、string对象,甚至可以是广义上的字符(流):Windows的Unicode下的wchar_t*、 TCHAR*或者C++的std::string。所有流的输入都会转化成UTF-8的格式。

断言使用实例

以下测试,实现一个求绝对值的函数,并在TEST宏里面使用ASSERT来进行测试不同类型的数据。

  1. #include <iostream>
  2. #include <gtest/gtest.h>
  3. using namespace std;
  4. int Abs(int x)
  5. {
  6. return x > 0 ? x : -x;
  7. }
  8. TEST(IsAbsTest, HandlerTrueReturn)
  9. {
  10. ASSERT_TRUE(Abs(1) == 1) << "Abs(1)=1"; //添加自定义输出信息
  11. ASSERT_TRUE(Abs(-1) == 1) << "Abs(-1)=1";
  12. ASSERT_FALSE(Abs(-2) == -2); //期待结果是false
  13. ASSERT_EQ(Abs(1), Abs(-1));
  14. ASSERT_NE(Abs(-1), 0);
  15. ASSERT_GT(Abs(-1), 0);
  16. ASSERT_LE(Abs(-1), 2);
  17. ASSERT_GE(Abs(-1), 0);
  18. }
  19. int main(int argc, char *argv[])
  20. {
  21. testing::InitGoogleTest(&argc, argv);
  22. return RUN_ALL_TESTS();
  23. }

1、测试一切正确

编译上面demo

g++ -o gtest_assert_demo gtest_assert_demo.cpp -std=c++11 -lgtest -lpthread

执行

2、测试出现失败用例

将上面代码中第一行的ASSERT_TRUE修改为ASSERT_FALSE。即:

ASSERT_FALSE(Abs(1) == 1) << "Abs(1)=1";

 重新编译

g++

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/395696
推荐阅读
相关标签
  

闽ICP备14008679号