最近接触了gtest,google的开源c++单元测试框架。讲一下在ubuntu上的使用步骤。
安装 gtest development package:
sudo apt-get install libgtest-dev
注意这一步只是安装源代码到/usr/src/gtest,需要用cmake构建Makefile然后再make生成静态库。
1 2 3 4 5 6 |
sudo apt-get install cmake #安装cmake cd /usr/src/gtest sudo cmake CMakeLists.txt sudo make sudo cp *.a /usr/lib/ #拷贝生成的库到/usr/lib/ |
写一个简单的测试代码testgcd.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//testgcd.cpp #include <gtest/gtest.h> int Gcd(int a, int b) //计算最大公约数 { return 0 == b ? a : Gcd(b, a % b); } TEST(GcdTest, IntTest) { EXPECT_EQ(1, Gcd(2, 5)); EXPECT_EQ(2, Gcd(2, 5)); EXPECT_EQ(2, Gcd(2, 4)); EXPECT_EQ(3, Gcd(6, 9)); } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } |
接着用g++编译,注意要链接的库(也可以用cmake构建,这只是个简单的示例):
g++ testgcd.cpp -lgtest_main -lgtest -lpthread
执行下
./a.out
看看输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from GcdTest [ RUN ] GcdTest.IntTest testgcd.cpp:11: Failure Value of: Gcd(2, 5) Actual: 1 Expected: 2 [ FAILED ] GcdTest.IntTest (0 ms) [----------] 1 test from GcdTest (0 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. (0 ms total) [ PASSED ] 0 tests. [ FAILED ] 1 test, listed below: [ FAILED ] GcdTest.IntTest 1 FAILED TEST |
输出结果也比较容易看懂。关于gtest更多文档和使用可以参考官方手册。
工程下的测试
当测试项目比较多的时候,一般会分离头文件和实现文件,然后可以用cmake构建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//!gcd.h #ifndef GCD_H #define GCD_H int Gcd(int a, int b); #endif //!gcd.cpp #include "gcd.h" int Gcd(int a, int b) { return 0 == b ? a : Gcd(b, a % b); } //!testgcd.cpp #include "gcd.h" #include <gtest/gtest.h> TEST(GcdTest, IntTest) { EXPECT_EQ(1, Gcd(2, 5)); EXPECT_EQ(2, Gcd(2, 5)); EXPECT_EQ(2, Gcd(2, 4)); EXPECT_EQ(3, Gcd(6, 9)); } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } |
接下来写一个CMakeLists.txt:(具体信息参考cmake的文档)
1 2 3 4 5 6 |
cmake_minimum_required(VERSION 2.6) # Locate GTest find_package(GTest REQUIRED)include_directories(${GTEST_INCLUDE_DIRS}) # Link testgcd with what we want to test and the GTest and pthread libraryadd_executable(testgcd testgcd.cpp gcd.cpp) target_link_libraries(testgcd ${GTEST_LIBRARIES} pthread) |
执行:
1 2 3 |
cmake CMakeLists.txt make ./testgcd |
可以看到相同的执行结果。
参考
Getting started with Google Test (GTest) on Ubuntu
A quick introduction to the Google C++ Testing Framework
时间: 2024-10-15 16:11:10