gtest单元测试
1. gtest是什么?简答:做测试用的
gtest是Google的一套用于编写C++测试的框架,可以运行在很多平台上(包括Linux、Mac OS X、Windows、Cygwin等等)。基于xUnit架构。支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等。
2. gtest的优点
- 测试应该是独立的、可重复的。一个测试的结果不应该作为另一个测试的前提。GTest中每个测试运行在独立的对象中。如果某个测试失败了,可以单独地调试它。
- 测试应该是有清晰的结构的。GTest的测试有很好的组织结构,易于维护。
- 测试应该是可移植和可复用的。有很多代码是不依赖平台的,因此它们的测试也需要不依赖于平台。GTest可以在多种操作系统、多种编译器下工作,有很好的可移植性。
- 测试失败时,应该给出尽可能详尽的信息。GTest在遇到失败时并不停止接下来的测试,而且还可以选择使用非终止的失败来继续执行当前的测试。这样一次可以测试尽可能多的问题。
- 测试框架应该避免让开发者维护测试框架相关的东西。GTest可以自动识别定义的全部测试,你不需要一一列举它们。简而言之,gtest已经非常的成熟了!!!
- 测试应该够快。GTest在满足测试独立的前提下,允许你复用共享数据,它们只需创建一次。
- GTest采用的是xUnit架构,你会发现和JUnit、PyUnit很类似,所以上手非常快。
3. 搭建测试框架
gtest下载地址: https://github.com/google/googletest
所以,
下载方法是:
git clone https://github.com/google/googletest.git
我在下载时出现了以下错误:
正克隆到 'googletest'...
fatal: unable to access 'https://github.com/google/googletest.git/': gnutls_handshake() failed: A TLS packet with unexpected length was received.
问题分析:
这个错误提示表明 Git 无法使用 HTTPS 协议与远程存储库进行通信,
因为在 TLS 握手期间发生了错误。
错误消息 "gnutls_handshake() failed: A TLS packet with unexpected length was received"
暗示在 TLS 握手期间存在问题。
这可能是由于网络问题、代理服务器、防火墙或其他因素导致的。
解决办法:
禁用 SSL 验证:您可以在 Git 中禁用 SSL 验证,方法是将 "GIT_SSL_NO_VERIFY" 环境变量设置为 "true"。
这不建议,因为它可能会危及您系统的安全性。
如果您必须使用此选项,可以运行以下命令:
exportGIT_SSL_NO_VERIFY=true
(因为我尝试了其他办法无法解决这个问题:所以我只能使用这种解决办法)
然后又再执行git clone https://github.com/google/googletest.git即可,
然后可以重新将export GIT_SSL_NO_VERIFY=false或者不设置也行
安装方法是:
cd googletest
cmake .
在执行cmake .时又遇到这个问题:
CMake Error at CMakeLists.txt:4 (cmake_minimum_required):
CMake 3.5 or higher is required. You are running version 2.8.12.2
解决办法:
提示就是说cmake版本过低,至少要3.5,但是我的cmake是2.8
先回到你项目的根目录,然后执行下面操作
cd../
wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gz
tar -xvzf cmake-3.22.1.tar.gz
cd cmake-3.22.1
chmod777 ./configure
./configure
出现这行字说明上面的执行成功:CMake has bootstrapped. Now run make.
makesudomakeinstallsudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
cmake --version
# cmake version 3.22.1
如果你版本成功更新请执行:
cd../
cd googletest
cmake .
注意:如果在make 过程中报错,可在CMakeLists.txt 中增加如下行,再执行下面的命令:
#添加的部分,关闭警告
add_definitions(-w)
cmake .make
还是报错:不过报错信息少了很多:
root@WXNNB:/home/wxn/googletest# make[12%] Building CXX object googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
c++: error: unrecognized command line option ‘-stdlib=libc++’
make[2]: *** [googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o] 错误 1
make[1]: *** [googletest/CMakeFiles/gtest.dir/all] 错误 2
make: *** [all] 错误 2
解决办法:cmake -DCMAKE_CXX_FLAGS="-stdlib=libstdc++"..
还是报错:不过报错信息又少了:
root@WXNNB:/home/wxn/googletest# cmake -DCMAKE_CXX_FLAGS="-stdlib=libstdc++" ..
CMake Error: The source directory "/home/wxn" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
解决方法:无...推倒重来
刷到一个很棒的文章:https://deepinout.com/gtest-tutorials/gtest-download-and-installation.html
按照上面的做法:
第一步:
git clone https://github.com/google/googletest.git
第一步搞定:!
第二步:
cd googletest
第三步:
mkdir build
第四步:
cd build
第五步:
cmake ..
再次报错:
CMake Error at /usr/local/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake:49 (message):
Could not find compiler setin environment variable CC:
/usr/bin/clang.
Call Stack (most recent call first):
CMakeLists.txt:18 (project)
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "/home/wxn/googletest/build/CMakeFiles/CMakeOutput.log".
root@WXNNB:/home/wxn/googletest/build# cmake ..
CMake Error at /usr/local/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake:49 (message):
Could not find compiler setin environment variable CC:
/usr/bin/clang.
Call Stack (most recent call first):
CMakeLists.txt:18 (project)
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "/home/wxn/googletest/build/CMakeFiles/CMakeOutput.log".
这个错误提示表明 CMake 无法找到 C 编译器和 C++ 编译器。错误消息中提到的 "/usr/bin/clang" 是当前系统上默认的 C 编译器。
exportCC=/usr/bin/gcc
exportCXX=/usr/bin/g++
再次执行cmake …成功!
第六步:
make
还是报错:人麻了
然后我换了一台虚拟机:
sudosusudoaptinstallgitgit clone https://github.com/google/googletest.git (访问被拒绝,说明你的校园网有问题,不稳定,多试几次)cd googletest
vi CMakeLists.txt
SET(CMAKE_CXX_FLAGS "-std=c++11")
:wq
aptinstall cmake
cmake .make
你猜一猜怎么着?成功了!居然是虚拟机问题!
历史的教训告诉我们,被高兴的太早!
上面成功之后,你还需要尝试一下
l
s
ls
ls
l
i
b
lib
lib命令与
m
a
k
e
make
make
i
n
s
t
a
l
l
install
install命令,我第一次执行
l
s
ls
ls
l
i
b
lib
lib命令
成功
成功
成功,但是执行
m
a
k
e
make
make
i
n
s
t
a
l
l
install
install命令失败!无奈~我又卸了重安,第二次才成功!如果你和我一样执行了诉上种命令出现了下面这样的结果,我可以告诉你这时gooletest环境才算正式搭建成功!
4. gtest_范例演示
代码放在我的代码仓库了,大家可以去去demo文件中查看,写的很详细!
代码地址
版权归原作者 踏过山河,踏过海 所有, 如有侵权,请联系我们删除。