转:http://ningning.today/2014/11/12/%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91/ubuntu%E4%BD%BF%E7%94%A8gtest%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6/
最近接触了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 cd /usr/src/gtest sudo cmake CMakeLists.txt sudo make sudo cp *.a /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
|
#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
|
#ifndef GCD_H #define GCD_H int Gcd(int a, int b); #endif #include "gcd.h" int Gcd(int a, int b) { return 0 == b ? a : Gcd(b, a % b); } #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) find_package(GTest REQUIRED)include_directories(${GTEST_INCLUDE_DIRS}) libraryadd_executable(testgcd testgcd.cpp gcd.cpp) target_link_libraries(testgcd ${GTEST_LIBRARIES} pthread)
|
执行:
1 2 3
|
cmake CMakeLists.txt make ./testgcd
|
可以看到相同的执行结果。
参考
Google C++ Testing Framework
Getting started with Google Test (GTest) on Ubuntu
A quick introduction to the Google C++ Testing Framework