GTest编译和使用

编程入门 行业动态 更新时间:2024-10-08 14:36:22

<a href=https://www.elefans.com/category/jswz/34/1593852.html style=GTest编译和使用"/>

GTest编译和使用

1. 初体验

  • 编译googletest
    • 下载googletest
    • cd googletest
    • mkdir build 建编译目录
    • cd build
    • cmake .. 生成makefile
    • make 编译后生成libgmock.a libgmock_main.a libgtest.a libgtest_main.a
    • sudo make install 将头文件导入到/usr/local/include, 静态库导入到/usr/local/lib64
  • 使用
    • 创建main文件
      #include <gtest/gtest.h>
      #include <iostream>using namespace std;int add(int a, int b)
      {return a + b;
      }
      // 注意使用TEST
      TEST(testTT2, abc) 
      {EXPECT_EQ(add(2,3), 5);
      }int main() 
      {testing::InitGoogleTest();return RUN_ALL_TESTS();
      }
      
    • g++编译:g++ test2 -o out1 -lgtest -lpthread
    • cmake编译
      cmake_minimum_required(VERSION 3.14.1)
      project(gtest_project)find_package(GTest CONFIG REQUIRED)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -g -Wall -O0")#link_directories(/usr/local/lib64)
      #include_directories(/usr/local/include)set(SRC test2)
      add_executable(out1 ${SRC})
      target_link_libraries(out1 gtest pthread) # 链接gtest
      
    • 执行生成的可执行文件 ./out1

2. Gtest功能函数解释

2.1 初始化SetUpTestCase/TearDownTestCase,SetUp/TearDown

以下函数使用需要定义测试套类继承::testing::Test,重新对应函数,使用TEST_F代替上面的TESTTEST_F: Test fixture, 多个测试用例需要用相同数据配置时,可以声明一个类继承Test,在类中定义数据,然后使用类名作为TEST_F的测试套名; TEST可以不自定义类,但同时也没法重载初始化函数)

  • SetUpTestCase:static测试套级别,运行测试套第一个用例前执行
  • TearDownTestCase: static 测试套级别,运行测试套最后一个用例后执行
  • SetUp:virtual 测试套中每个测试用例开始时执行
  • TearDown:virtrual 测试套中每个测试用例运行后执行
class TestSuit1 : public ::testing::Test {
public:static void TearDownTestCase() {std::cout << "TearDownTestCase" << std::endl;}static void SetUpTestCase() {std::cout << "SetUpTestCase" << std::endl;}virtual void SetUp(){std::cout << "SetUp" << std::endl;}virtual void TearDown(){std::cout << "TearDown" << std::endl;}
};int testFunc(int a, int b) 
{return a + b;
}// 注意TEST_F
TEST_F(TestSuit1, testCase1) 
{std::cout << testFunc(1, 3) << std::endl;;}TEST_F(TestSuit1, testCase2) 
{std::cout << testFunc(2, 3) << std::endl;;
}

  • 备注:
    • 另外一种方法实现全局SetUpTearDown,也就是全局的测试用例在执行前后都会执行的函数
    • 使用:
      • 自定义类继承::testing::Environment, 在类中重写SetUpTearDown方法,定义类对象
      • RUN_ALL_TESTS前调用testing::AddGlobalTestEnvironment注册全局环境
      class MyEnvironment : public testing::Environment;::testing::AddGlobalTestEnvironment(new MyEnvironment());
      RUN_ALL_TESTS();
      
2.2 断言
  • 布尔断言:单参断言
    • ASSERT_TRUE、ASSERT_FALSE、EXPECT_TRUE、EXPECT_FALSE
  • 数值断言:双参
    • ASSERT_EQ、ASSERT_NE、ASSERT_LT、ASSERT_LE、ASSERT_GT、ASSERT_GE
    • EXPECT_EQ、EXPECT_NE、EXPECT_LT、EXPECT_LE、EXPECT_GT、EXPECT_GE
  • 字符串断言
    • ASSERT_STREQ、ASSERT_STRCASEEQ
2.3 运行参数
  • 过滤只跑某些测试套:--gtest_filter=只需要运行的用例名正则*

  • 不执行但列出测试用例:--gtest_list_tests =

  • 返回结果:--gtest_output=xml/json 按照xml或者json格式返回结果

    • --gtest_output=json:/ussr/local 指定格式和目录
  • 备注:参数生效前提是在RUN_ALL_TESTS要继承main函数的argc和argv


  • 参考
    • .html
    • =hugo

更多推荐

GTest编译和使用

本文发布于:2024-02-14 03:50:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762021.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:GTest

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!