Loading...
墨滴

公众号:offer多多

2021/10/14  阅读:27  主题:橙心

玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数

玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数

大家好,我是小王

问题来源:

https://open.oceanbase.com/answer/detail?id=13700018
https://open.oceanbase.com/answer/detail?id=13700018

一、前言

什仫是gtest

gtest是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++单元测试框架,由google公司发布。

使用gtest编写的测试案例通常本身就是一个可执行文件,因此运行起来非常方便。

同时,gtest也为我们提供了一系列的运行参数(环境变量、命令行参数或代码里指定),

使得我们可以对案例的执行进行一些有效的控制。

二、基本介绍

前面提到,对于运行参数,gtest提供了三种设置的途径:

  1. 系统环境变量

  2. 命令行参数

  3. 代码中指定FLAG

因为提供了三种途径

命令行参数 > 代码中指定FLAG > 系统环境变量

为什么我们编写的测试案例能够处理这些命令行参数呢?

是因为我们在main函数中,将命令行参数交给了gtest,由gtest来搞定命令行参数的问题。

int _tmain(int argc, _TCHAR* argv[])
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
 

export LD_LIBRARY_PATH

小王提问1:系统环境变量怎么设置?

答:

  • LD_LIBRARY_PATH 设置环境变量:
Example

cpp:/app/data/oceanbase/unittest/sql/parser/test_parser.cpp

build cpp : /app/data/oceanbase/build_debug/unittest/sql/parser/test_parser
cd /app/data/oceanbase/build_debug/unittest/sql/

./parser err

LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/app/data/oceanbase/deps/3rd/usr/local/oceanbase/devtools/lib64:/app/data/oceanbase/deps/3rd/usr/local/oceanbase/deps/devel/lib/mariadb:/app/data/oceanbase/deps/3rd/usr/local/oceanbase/deps/devel/lib

[root@oceanbase parser]# ./test_parser --gtest_filter=TestParser.basic_test

succ to open, filename=test_parser.log, fd=3, wf_fd=2

Note: Google Test filter = TestParser.basic_test
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from TestParser
[ RUN      ] TestParser.basic_test
[       OK ] TestParser.basic_test (818 ms)
[----------] 1 test from TestParser (818 ms total)


  • 测试一个模块: ./run_tests.sh --test-dir /app/data/oceanbase/build_debug/unittest/sql/parser
[root@oceanbase unittest]# cat run_tests.sh
#!/bin/bash

CURRENT_DIR="$(cd $(dirname $0); pwd)"
CTEST_COMMAND=${CURRENT_DIR}/../../deps/3rd/usr/local/oceanbase/devtools/bin/ctest
export LD_LIBRARY_PATH=${CURRENT_DIR}/../../deps/3rd/usr/local/oceanbase/devtools/lib64:${CURRENT_DIR}/../../deps/3rd/usr/local/oceanbase/deps/devel/lib/mariadb:${CURRENT_DIR}/../../deps/3rd/usr/local/oceanbase/deps/devel/lib
export CTEST_OUTPUT_ON_FAILURE=ON
${CTEST_COMMAND} "$@"

小王补充基础:

  • $@ 是传给脚本的所有参数的列表

  • .PHONY : test

如果:该目录下面有名为clean文件怎么办呢?

.PHONY: clean //把clean定义为假象目标。他就不会判断名为“clean”的文件是否存在,

  • target_sources:Specifies sources to use when building a target and/or its dependents

小王提问2:什么是测试案例名称?

答:

  • #define TEST(test_suite_name, test_name)

三、参数列表

了解了上面的内容,我这里就直接将所有命令行参数总结和罗列一下。

如果想要获得详细的命令行说明,直接运行你的案例,输入命令行参数: --help 或 -help

  • https://github.com/watchpoints/daily-interview/tree/main/code/2021/gtest ./Hello --help

1. 测试案例集合:运行指定单元测试case

1.1 查看单元测试名字:

//--gtest_list_tests
//List the names of all tests instead of running them. The name of
//TEST(Foo, Bar) is "Foo.Bar".

./Hello  --gtest_list_tests
  testCase.
  test1
  test2

观察:

  • 单元测试名字testCase.test1 testCase.test2

1.2 运行单元指定单元测试

/Hello  --gtest_filter=testCase.test1
  • 代码: https://github.com/watchpoints/daily-interview/tree/main/code/2021/gtest

  • 看三遍:https://github.com/google/googletest/blob/master/googletest/

  • 语法:https://github.com/google/googletest/blob/master/docs/advanced.md

example:

./foo_test Has no flag, and thus runs all its tests.
./foo_test --gtest_filter=* Also runs everything, due to the single match-everything * value.
./foo_test --gtest_filter=FooTest.* Runs everything in test suite FooTest .

 
  1. 测试案例输出
  • 直接默认就可以了。

  • --gtest_output=xml: 保存到文件 默认为案例当前路径。

五、总结

本篇主要介绍了gtest案例执行时提供的一些参数的使用方法,这些参数都非常有用。

在实际编写gtest测试案例时肯定会需要用到的时候。至少我现在比较常用的就是:

  1. --gtest_filter

系列:

1.玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

2.玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言

3.玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制

4.玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化

5.玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试

6.玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数

7.玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest

8.玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架

公众号:offer多多

2021/10/14  阅读:27  主题:橙心

作者介绍

公众号:offer多多