gtest变化量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gtest变化量相关的知识,希望对你有一定的参考价值。

Google Test(gtest)是一个 C++ 编写的单元测试框架。它可以帮助开发人员编写、维护和运行 C++ 代码的单元测试。

在使用 Google Test 进行单元测试时,可以使用 gtest 的 ASSERT_XXX() 或 EXPECT_XXX() 宏来检查测试结果是否正确。其中,ASSERT_XXX() 表示如果测试失败,将导致程序崩溃,而 EXPECT_XXX() 则只会输出一条错误信息,但程序不会崩溃。

对于变化量(delta)的概念,可以用于比较浮点数类型的数值是否相等。由于浮点数类型的舍入误差,使用等于运算符(==)进行比较可能会得到错误的结果。为了避免这种问题,可以使用变化量(delta)的概念进行比较。变化量即两个数值之间的差值,如果这个差值小于等于某个给定的值(通常称为容差值),则可以认为这两个数值相等。

在 gtest 中,可以使用 EXPECT_NEAR() 或 ASSERT_NEAR() 宏来进行浮点数比较。这些宏将会比较两个浮点数类型的数值,并将它们与一个给定的变化量进行比较。如果两个数值之间的差值小于等于变化量,则测试通过;否则,测试失败。

下面是一个使用 EXPECT_NEAR() 宏进行浮点数比较的例子:

scss
Copy code
#include <gtest/gtest.h>

TEST(MyTest, FloatingPointComparison)
double a = 0.1;
double b = 0.2;
EXPECT_NEAR(a + a, b, 0.0001);


在这个例子中,我们比较了 a+a 和 b 两个浮点数类型的数值是否相等。由于浮点数类型的精度问题,如果直接使用 EXPECT_EQ() 宏进行比较可能会失败,因此我们使用 EXPECT_NEAR() 宏进行比较,并设置容差值为 0.0001。如果 a+a 和 b 两个数值之间的差值小于等于 0.0001,则测试通过。
参考技术A gtest的变化量主要包括:
1. 增加了更多的断言,包括浮点数断言等;
2. 增加了更多可用的测试框架,比如TYPED_TEST和VALUE_PARAM_TEST;
3. 支持更多的操作系统,并且可以更好地支持非Windows操作系统;
4. 提供更多的测试工具,比如性能测试工具,内存泄漏测试工具等;
5. 支持更多的编程语言,包括C++,Java,Python等;
6. 改进了断言的处理,支持多种可视化断言;
7. 支持更多的测试报告格式,比如XML,html等;
8. 支持更多的测试结果输出,比如控制台输出,文件输出等;
9. 支持更多的可配置选项,比如控制测试用例的执行顺序等;
10. 支持更多的断言库,比如Google Mock等。
参考技术B gtest变化量可以用什么来衡量

GoogleTest变化量可以通过覆盖率或缺陷率来衡量。覆盖率可以反映被测代码的可测性,缺陷率可以反映被测代码的质量。

Catkin 找不到 gtest

【中文标题】Catkin 找不到 gtest【英文标题】:Catkin cannot find gtest 【发布时间】:2018-08-22 15:04:49 【问题描述】:

从昨天开始,我的包含测试的包都没有构建。 Catkin 抱怨在使用 catkin_add_gtests() 时找不到 gtest,因为 GTEST_FOUND 为 FALSE。您可以在下面的错误消息中看到这一点,以及我添加到 CMakeLists 中的自定义输出。直到昨天,调用 catkin_add_gtests() 时 GTEST_FOUND 为 TRUE。

这是我经常遇到的错误。在这种情况下,我试图在一个干净的 catkin 工作区上构建一个模型包:

Errors     << silly_pkg:cmake /home/paco/catkin_ws2/logs/silly_pkg/build.cmake.002.log                                                                                                                                                                                                                                
Not searching for unused variables given on the command line.
Re-run cmake no build system arguments
-- Using CATKIN_DEVEL_PREFIX: /home/paco/catkin_ws2/devel/.private/silly_pkg
-- Using CMAKE_PREFIX_PATH: /home/paco/catkin_ws2/devel;/opt/ros/kinetic
-- This workspace overlays: /home/paco/catkin_ws2/devel;/opt/ros/kinetic
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/paco/catkin_ws2/build/silly_pkg/test_results
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.11
-- GTEST_FOUND: FALSE
CMake Warning at /opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake:149 (message):
  skipping gtest 'test_silly_pkg' in project 'silly_pkg' because gtest was
  not found
Call Stack (most recent call first):
  /opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake:79 (_catkin_add_executable_with_google_test)
  /opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake:28 (_catkin_add_google_test)
  CMakeLists.txt:28 (catkin_add_gtest)


CMake Error at /home/paco/catkin_ws2/src/silly_pkg/CMakeLists.txt:33 (target_link_libraries):
  Cannot specify link libraries for target "test_silly_pkg" which is not
  built by this project.


-- Configuring incomplete, errors occurred!
See also "/home/paco/catkin_ws2/build/silly_pkg/CMakeFiles/CMakeOutput.log".
See also "/home/paco/catkin_ws2/build/silly_pkg/CMakeFiles/CMakeError.log".
cd /home/paco/catkin_ws2/build/silly_pkg; catkin build --get-env silly_pkg | catkin env -si  /usr/bin/cmake /home/paco/catkin_ws2/src/silly_pkg --no-warn-unused-cli -DCATKIN_DEVEL_PREFIX=/home/paco/catkin_ws2/devel/.private/silly_pkg -DCMAKE_INSTALL_PREFIX=/home/paco/catkin_ws2/install; cd -

我正在使用 catkin 0.7.11、libgtest-dev 1.7.0 和 cmake 3.5.1。我在 Ubuntu 16.04 中使用 ROS Kinetic。我昨天唯一做的就是重新安装 ROS Kinetic,但软件包版本完全相同。有人遇到过这个问题吗?您对可能发生的事情有任何想法吗?

编辑 3/09/18:

通过与不同计算机中的功能性 catkin+gtest 工作区进行比较,我发现主要区别在于/opt/ros/kinetic/share/catkin/cmake/test/gtest.cmake 的结果。在功能工作区中,line 292 评估为 TRUE(gtest/gmock 不是目标),而在我的工作区中,它评估为 FALSE。这是因为在我运行find_package(GMock QUIET)(第287 行)的工作区中将gmock 和gtest 设置为导入目标,而这在另一台计算机中不会发生。为什么会有所不同?

感谢 TikO 的帮助!

【问题讨论】:

如果您找到了解决方案,请在下面添加您自己问题的答案。问题不应该嵌入答案,也不应该在上面写上“(已解决)”。您可以改为使用复选标记按钮来注释对您最有用的答案。 【参考方案1】:

由于您写道 cmake 找不到库并且您已重新安装 Kinetic,因此我假设您有一台新安装的机器或意外清除了 gtest 库。 如果你安装libgtest-dev,你只会得到你需要构建和安装的源代码:

sudo apt-get install libgtest-dev
mkdir /tmp/gtest_build && cd /tmp/gtest_build
cmake /usr/src/gtest
make
#copy or symlink libgtest.a and ligtest_main.a to /usr/lib folder
sudo cp *.a /usr/lib

在这个例程之后,您应该能够再次构建而不会出现 cmake 抱怨。

可选

如果您在计算机上的权限有限,并且不允许以这种方式安装库,只需将它们复制到某个主文件夹中,例如

mkdir ~/lib && cp *.a ~/lib

但请注意,您必须通过以下方式调用 catkin:

LIBRARY_PATH=~/lib GTEST_ROOT=~/lib catkin_make

LIBRARY_PATH 告诉链接器在哪里可以找到库,而GTEST_ROOT 为 cmake 提供位置提示以进行检查。

参考:https://github.com/tik0/gtest_ros_example

【讨论】:

谢谢!如果我需要链接库,我认为这将是解决方案。但是,据我所知, catkin_add_gtests() 会在 /usr/src 和 /usr/include 中找到文件,以使用您的 catkin 包编译 gtest。根据 libgtest README,这样做是为了使用与代码相同的选项来编译测试。 我试过了,不出所料,cmake 抱怨它无法将 gtest 构建为导入库,因为“因为已经存在另一个同名目标”。 好的,知道了。你能上传你的CMakeLists.txt 或项目吗?关键是,find_package(GTest REQUIRED) 在系统文件夹中找不到预构建库时将返回 FALSE。因此,它与您的错误无关。会不会是某个子项目试图通过find_package找到gtest? 没错,恐怕find_package才是问题的根源。查看最新的问题更新。 我假设两个系统对 gmock 或 gtest 使用不同的 find-package 模块(系统范围与 ROS 内部)。在调试模式下运行 cmake(例如 -Wdev--debug-output--trace)并比较两个输出。它还可以帮助通过env 调查这两种环境。【参考方案2】:

找到解决方案

gmock 和 gtest 被设置为导入目标,因为建议的 libgtest 手动编译在 /usr/share/cmake-3.5/Modules 中创建了一个 FindGMock.cmake 文件。该文件被 find(GMock QUIET) 调用 在 catkin_add_gtests() 中,因此设置导入的目标。只需删除 FindGMock.cmake 即可解决问题。

【讨论】:

以上是关于gtest变化量的主要内容,如果未能解决你的问题,请参考以下文章

pandas基于时序数据计算模型预测推理需要的统计数据(累计时间长度变化变化率方差均值最大最小等):数据持续的时间(分钟)获得某一节点之后的数据总变化量获得范围内的统计量

为啥当键盘出现时 UICollectionView 偏移量会发生变化

量化 git diff 的变化量?

当视图第一次消失时,ios icarousel 视图的内容偏移量正在发生变化

如果数组大小发生变化以及定义的宏如何在此处计算偏移量,为啥 C 结构中的字符数组的偏移量会有所不同? [复制]

在启用分页的情况下检测滚动视图中的 y 偏移量何时发生变化