简单易懂的单元测试框架-gtest(一)
简单易懂的单元测试框架-gtest(一)
简介
gtest是google开源的一个单元测试框架,以其简单易学的特点被广泛使用。该框架以第三方库的方式插入被测代码中。同其他单元测试框架相似,gtest也通过制作测试样例来进行代码测试。同时,gtest还支持通过事件机制为这些测试样例添加不同级别的挂钩函数。
安装
在ubuntu中安装gtest的指令如下。
sudo apt-get install libgtest-dev
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
sudo cp *.a /usr/lib
由于下载的gtest是源文件,所需要自己编译成库文件(静态库),再复制到库目录下。
Hello World
一个基础的单元测试示例如下。这里的被测试函数为checkOdd,我们创建了一个测试集,测试集合包含了两个测试。每个测试内部包含几个断言语句。
/* 一个简单的单元测试示例 */
#include <gtest/gtest.h>
bool checkOdd(int a){
return a%2==1;
}
// 测试集checkOddTest的测试1
TEST(checkOddTest, test1){
ASSERT_EQ(true, checkOdd(1));
ASSERT_EQ(true, checkOdd(11));
}
// 测试集checkOddTest的测试2
TEST(checkOddTest, test2){
ASSERT_EQ(false, checkOdd(2));
ASSERT_EQ(false, checkOdd(12));
}
int main(int argc, char **argv){
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
为了编译上述代码,制作了一个cmake配置文件CMakeLists.txt,内容如下,
cmake_minimum_required(VERSION 2.6)
# Locate GTest
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(runTests test.cc)
target_link_libraries(runTests ${GTEST_LIBRARIES} pthread)
add_custom_command(TARGET runTests
POST_BUILD
COMMAND ./runTests
)
这里的add_custom_command为目标runTests添加了一个客制命令(貌似是在runTests构建后执行命令”./runTests”)。这里添加这条命令用于在编译单元测试时,顺便运行就运行这些单元测试。编译指令如下,
cmake CMakeLists.txt
make
./runTests
运行结果为,
Scanning dependencies of target runTests
[ 50%] Building CXX object CMakeFiles/runTests.dir/test.cc.o
[100%] Linking CXX executable runTests
[==========] Running 2 tests from 1 test case.
[———-] Global test environment set-up.
[———-] 2 tests from checkOddTest
[ RUN ] checkOddTest.test1
[ OK ] checkOddTest.test1 (0 ms)
[ RUN ] checkOddTest.test2
[ OK ] checkOddTest.test2 (0 ms)
[———-] 2 tests from checkOddTest (0 ms total)
[———-] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (0 ms total)
[ PASSED ] 2 tests.
[100%] Built target runTests
其他
Gcov & Lcov是用于检查代码覆盖率的工具,貌似还可以与gtest结合使用。
Reference
[1] https://www.eriksmistad.no/getting-started-with-google-test-on-ubuntu/ HelloWorld的示例参考这里