一. gtest
1. 地址
2. 编译
- 编译安装
mkdir build
cd build
cmake ..
make
- samples 源码与单元测试文件命令
cd build
cmake -Dgtest_build_samples=ON ..
测试:
seivl@seivl-Default-string:~/gtest/googletest/build/googletest$ ./sample1_unittest
结果:
Running main() from /home/seivl/gtest/googletest/googletest/src/gtest_main.cc
[==========] Running 6 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 3 tests from FactorialTest
[ RUN ] FactorialTest.Negative
[ OK ] FactorialTest.Negative (0 ms)
[ RUN ] FactorialTest.Zero
[ OK ] FactorialTest.Zero (0 ms)
[ RUN ] FactorialTest.Positive
[ OK ] FactorialTest.Positive (0 ms)
[----------] 3 tests from FactorialTest (0 ms total)
[----------] 3 tests from IsPrimeTest
[ RUN ] IsPrimeTest.Negative
[ OK ] IsPrimeTest.Negative (0 ms)
[ RUN ] IsPrimeTest.Trivial
[ OK ] IsPrimeTest.Trivial (0 ms)
[ RUN ] IsPrimeTest.Positive
[ OK ] IsPrimeTest.Positive (0 ms)
[----------] 3 tests from IsPrimeTest (0 ms total)
[----------] Global test environment tear-down
[==========] 6 tests from 2 test suites ran. (0 ms total)
[ PASSED ] 6 tests.
3. 测试
// main.cpp
#include <iostream>
#include <gtest/gtest.h>
int sum(int a, int b) {
return a+b;
}
TEST(sum, testSum) {
EXPECT_EQ(5, sum(2, 3)); // 求合2+3=5
EXPECT_NE(3, sum(3, 4)); // 求合3+4 != 3
}
g++ main.cpp -I /home/seivl/gtest/googletest/googletest/include/ -L /home/seivl/gtest/googletest/build/lib -lgtest -lgtest_main -lpthread -std=c++11 -o main
结果:
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from sum
[ RUN ] sum.testSum
[ OK ] sum.testSum (0 ms)
[----------] 1 test from sum (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[ PASSED ] 1 test.
4. 使用
~/gtest/googletest/googletest$ 路径下执行下面的指令
sudo cp -a include/gtest /usr/local/include/
~/gtest/googletest/build/lib$ 路径下执行下面的指令
sudo cp libgtest*.a /usr/lib
现在编译只要:
g++ test.cpp -lgtest -lgtest_main -lpthread -std=c++11 -o test
5. Cmake 中使用
package 文件:
把静态链接库, .a
, 文件放进来
seivl@seivl-Default-string:~/me/代码/规划/gtest_test$ tree -L 2
.
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── gtest_test
│ └── Makefile
├── CMakeLists.txt
├── data
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── map1.png
│ ├── map2.png
│ ├── map3.png
│ └── path_visual.gif
├── googletest
│ ├── build
│ ├── BUILD.bazel
│ ├── ci
│ ├── CMakeLists.txt
│ ├── CONTRIBUTING.md
│ ├── CONTRIBUTORS
│ ├── docs
│ ├── googlemock
│ ├── googletest
│ ├── library.json
│ ├── LICENSE
│ ├── main
│ ├── main.cpp
│ ├── README.md
│ └── WORKSPACE
├── include
│ ├── AStar.h
│ └── gtest
├── lib
│ ├── libgmock.a
│ ├── libgmock_main.a
│ ├── libgtest.a
│ └── libgtest_main.a
└── src
├── AStar.cpp
└── main.cpp
修改 Cmakelists
文件:
cmake_minimum_required(VERSION 2.8.9)
project(gtest_test)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(OpenCV REQUIRED)
set(AS_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/AStar.cpp
)
set(AS_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/include/AStar.h
)
include_directories(include maps)
file(GLOB SOURCES "src/*.cpp")
link_directories(lib)
set(GTEST gtest pthread libgtest.a libgtest_main.a libgmock_main.a libgmock.a)
add_executable(gtest_test ${SOURCES} ${AS_HEADERS} ${AS_SOURCES})
target_link_libraries(gtest_test ${OpenCV_LIBS} ${GTEST})
二. gflags
没安装编译会报错:
/usr/bin/ld: error: undefined symbol:
google::FlagRegisterer::FlagRegisterer(char const*, char const*,
char const*, char const*, void*, void*)
1. 安装
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build
cd build
cmake ..
make
sudo make install
2. Cmakelists 修改
在相应的 CMakeLists.txt 中添加
find_package(gflags REQUIRED)
target_link_libraries(gflags)
就 ok 了