单元测试框架gtest和gmock教程
1 环境搭建
- git clone https://github.com/google/googletest.git
- cd googletest
- mkdir build (创建build目录)
- cd build (进入build目录)
- cmake .. -A Win32 (编译32位 -Win32,编译64位 -Win64)
- 打开googletest-distribution.sln,编译,在build/lib目录下生成gmock.lib, gmock_main.lib, gtest.lib, gtest_main.lib(debug版本后带d)
- gtest.lib和gtest_main.lib区别是 gtest_main.lib中已经包含了main函数,【int main(int argc, char ** argv)】,而如果仅仅包含gtest.lib则需要自己写main函数
int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
- 如果遇到编译错误如gtestd.lib(gtest-all.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(main.obj 中),解决方法是 右键属性-c/c++-代码生成,运行库多线程调试 DLL (/MDd)改为多线程调试 (/MTd)
2 编写测试项目
- 新建test_gtest目录
- 编写CMakeLists.txt文件
cmake_minimum_required(VERSION 3.0.0) project(test_gtest VERSION 0.1.0) include_directories(XXXXXXXXXX\\caetest\\googletest\\googletest\\include) link_directories(XXXXXXXX\\googletest\\build\\lib\\Debug) link_libraries(gtestd gtest_maind) add_executable(test_gtest mytest.cpp )
- 编写mytest.cpp
#include <gtest/gtest.h> int add(int n, int m) { return n + m; } bool true_or_false(bool flag) { return flag; } TEST(testcase, test_add) { EXPECT_EQ(add(5, 6), 10); ASSERT_EQ(add(2, 3), 5); } GTEST_TEST(gzhsuite, test_flag) { EXPECT_EQ(true_or_false(false), true); ASSERT_EQ(true_or_false(true), true); } // 如果未引用gtest_maind,则需要放开下面的main函数 /*int main(int argc, char **argv) { printf("Running main() from %s\n", __FILE__); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); return 0; }*/