无法使用 Google Test 在 C++ 中成功设置单元测试

Posted

技术标签:

【中文标题】无法使用 Google Test 在 C++ 中成功设置单元测试【英文标题】:Unable to Successfully Set Up Unit Tests in C++ using Google Test 【发布时间】:2021-06-04 13:01:55 【问题描述】:

我正在尝试使用 google test 来验证 C++ 中红黑树实现的一些测试。我正在关注此post 中评分最高的答案。我确定要说明 Google Test 的最新发行版是 1.10.0 版,而不是 1.8.0 版。我尝试安装和链接库的步骤如下:

首先,我得到了最新的 Google 测试框架,如下所示:

wget https://github.com/google/googletest/archive/release-1.10.0.tar.gz

这成功安装。接下来,我可以在新的 googletest-release-1.10.0 文件夹中解压缩并构建 google test 的共享库。调用后调用make:

cmake -DBUILD_SHARED_LIBS=ON .

导致此消息:

[ 25%] Built target gtest
[ 50%] Built target gmock
[ 75%] Built target gmock_main
[100%] Built target gtest_main

问题似乎发生在我将库中的标头复制到正确目录的步骤中。我可以这样做

 sudo cp -a googletest/include/gtest /usr/include

但我的系统无法在 googlemock/gtest 中找到文件:尝试复制这些文件:

sudo cp -a googlemock/gtest/libgtest_main.so googlemock/gtest/libgtest.so /usr/lib/

提示不存在此类文件:

cp: cannot stat 'googlemock/gtest/libgtest_main.so': No such file or directory
cp: cannot stat 'googlemock/gtest/libgtest.so': No such file or directory

【问题讨论】:

为什么要手动复制而不是sudo make install 【参考方案1】:

当你构建包时,你会得到一个这样的目录:

├── appveyor.yml
├── bin
├── BUILD.bazel
├── ci
├── CMakeCache.txt
├── CMakeFiles
├── cmake_install.cmake
├── CMakeLists.txt
├── CONTRIBUTING.md
├── CTestTestfile.cmake
├── googlemock
├── googletest
├── lib
├── library.json
├── LICENSE
├── Makefile
├── platformio.ini
├── README.md
└── WORKSPACE

您找不到的文件位于lib 文件夹中。

lib
├── libgmock_main.so
├── libgmock.so
├── libgtest_main.so
└── libgtest.so

【讨论】:

【参考方案2】:

我认为你不应该使用cp -a。由于在/usr/lib 中复制的.so 文件似乎具有不可用的编译权限。

我的 CMakeList.txt 是这样的:

add_executable(Test test.cc)
target_link_libraries(Test /usr/lib/libgtest.so /usr/lib/libgtest_main.so -pthread)

如果你使用cp -a,在make过程中会出现如下错误:

make[2]: *** No rule to make target '/usr/lib/libgtest.so', needed by 'Test'.  Stop.

所以我只用cp,并没有错。

【讨论】:

以上是关于无法使用 Google Test 在 C++ 中成功设置单元测试的主要内容,如果未能解决你的问题,请参考以下文章

Google Test -- C++单元测试框架

Google Test -- C++单元测试框架

局部变量在类的方法中成为最终变量——但为啥呢?

Linux 下使用Google Test

无法使用 Google 的 protobuf 构建测试 C++ 应用程序

如何在 UITableView 中成为FirstResponder UITextField