无法使用 gmock/gmock.h 构建 C/C++ 程序,生成了太多错误
Can't build C/C++ program with gmock/gmock.h, too many errors are generated
我弄清楚了google测试平台。我希望这个Gtest平台能够帮助我目前的项目。
所以,我没有看到 Gtest 团队的任何教程来指导如何创建一个新项目并在包含库 "gmock/gmork" 和 "gtest/gtest.h" 的同时编译项目。
我从 repo 下载了 Gtest 项目:google/googletest
执行一些步骤才能使用 Gtest 框架:
安装 gtest 平台:
$ sudo apt-get install libgtest-dev #gtest
$ sudo apt-get install google-mock #gmock
然后,安装Cmake:
$ sudo apt-get install cmake
并构建 2 个项目(gtest 和 gmock)
$ cd /usr/src/gtest
$ sudo cmake CMakeLists.txt
$ cd /usr/src/gmock
$ sudo cmake CMakeLists.txt
$ sudo make
最后将所有*.a文件复制到/usr/lib
$ cp *.a /usr/lib
包括:libgtest.a、libgtest_main.a、libgmock.a、libgmock_main.a
我在 Ubuntu 14.04 LTS 中通过 Eclipse C 创建了一个新项目。
当我将 gtest.h 包含到我的项目中时,该程序已成功构建并运行良好
g++ -o "myGtest" ./myGtest.o ./src_code.o -lgtest -lpthread
但是,如果包含更多 gmock.h,程序将无法构建。编译器生成了太多错误
g++ -o "myGtest" ./myGtest.o ./src_code.o -lgtest -lgmock -lpthread
请帮我解决这个问题。
对了,我还有一个问题:
假设我有一个简单的模块Csrc_code.c,例如:
我正在测试函数,在函数调用测试时,我想重新路由程序不执行这个测试,它会跳转到我自定义的测试
例如,在 myGtest.cpp 中,我写:
int test(int a) {
printf("overridden successful !\n");
return a;
}
此技术是模拟或存根或虚拟函数。
请给我详细信息,我如何通过 Gtest 框架模拟被测模块中的内部函数?请举个例子。
我已尝试在此站点上找到以前 post 的解决方案。
但是,我没有想出答案。
请参阅这篇关于如何使用 eclipse 设置 google 测试的文章:
http://www.codeproject.com/Articles/811934/Cplusplus-unit-test-start-guide-how-to-set-up-Goog
关于你的第二个问题:
Google Mock 用于模拟接口。您可以设置期望并定义接口功能的操作。所以你的 'test' 函数必须是接口的一部分才能模拟它。
请从本教程开始:
https://github.com/google/googletest/blob/master/googlemock/docs/ForDummies.md
我认为主要原因是Gtest和Gmock的版本不匹配。
我从 google:
的一个来源得到它们
https://github.com/google/googletest/tree/master/googletest
并进行了上述配置。它对我来说很好。
Gmock 配置 [Eclipse Mar - Ubuntu 14.04 LTS]
从 google github
克隆主资源
git 克隆 https://github.com/google/googletest.git GoogleTest/
安装 Cmake:
sudo apt-get 安装 cmake
通过 Cmake 构建主 Gtest 项目:
cd GoogleTest/googlemock
sudo cmake CMakeLists.txt
sudo make
我们将获取日志信息:
Scanning dependencies of target gmock
[ 14%] Building CXX object CMakeFiles/gmock.dir/home/thaohm2/FPT/Softs/GoogleTest/googletest/src/gtest-all.cc.o
[ 28%] Building CXX object CMakeFiles/gmock.dir/src/gmock-all.cc.o
Linking CXX static library libgmock.a
[ 28%] Built target gmock
Scanning dependencies of target gmock_main
[ 42%] Building CXX object CMakeFiles/gmock_main.dir/home/thaohm2/FPT/Softs/GoogleTest/googletest/src/gtest-all.cc.o
[ 57%] Building CXX object CMakeFiles/gmock_main.dir/src/gmock-all.cc.o
[ 71%] Building CXX object CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
Linking CXX static library libgmock_main.a
[ 71%] Built target gmock_main
Scanning dependencies of target gtest
[ 85%] Building CXX object gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
Linking CXX static library libgtest.a
[ 85%] Built target gtest
Scanning dependencies of target gtest_main
[100%] Building CXX object gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
Linking CXX static library libgtest_main.a
[100%] Built target gtest_main
Four static libraries are generate:
libgmock.a libgmock_main.a libgtest.a libgtest_main.a
我们需要将所有*.a文件复制到/usr/lib:
sudo cp *.a /usr/lib
sudo cp gtest/*.a /usr/lib
并将gmock和gtest必要的库复制到/usr/include
sudo cp -r include/gmock /usr/include/
sudo cp -r ../googletest/include/gtest/ /usr/include/
- 创建一个新的 C++ 项目并将 "gmock" 和 "pthread" 选项添加到链接器库
右击项目 --> Properties --> C/C++ Builder --> Setting --> Tool Settings --> GCC C++ Linker --> Libraries
添加...
gmock
pthread
请注意,gmock 必须是 pthread 的 frond。
将gmock和gtest添加到你的项目中并进行项目编译:
包括
包括
//...
int main(int argc, char *argv[]) {
::测试::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
输出:
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (0 ms total)
[ PASSED ] 0 tests.
完成。
我弄清楚了google测试平台。我希望这个Gtest平台能够帮助我目前的项目。
所以,我没有看到 Gtest 团队的任何教程来指导如何创建一个新项目并在包含库 "gmock/gmork" 和 "gtest/gtest.h" 的同时编译项目。
我从 repo 下载了 Gtest 项目:google/googletest
执行一些步骤才能使用 Gtest 框架:
安装 gtest 平台:
$ sudo apt-get install libgtest-dev #gtest
$ sudo apt-get install google-mock #gmock
然后,安装Cmake:
$ sudo apt-get install cmake
并构建 2 个项目(gtest 和 gmock)
$ cd /usr/src/gtest
$ sudo cmake CMakeLists.txt
$ cd /usr/src/gmock
$ sudo cmake CMakeLists.txt
$ sudo make
最后将所有*.a文件复制到/usr/lib
$ cp *.a /usr/lib
包括:libgtest.a、libgtest_main.a、libgmock.a、libgmock_main.a
我在 Ubuntu 14.04 LTS 中通过 Eclipse C 创建了一个新项目。 当我将 gtest.h 包含到我的项目中时,该程序已成功构建并运行良好
g++ -o "myGtest" ./myGtest.o ./src_code.o -lgtest -lpthread
但是,如果包含更多 gmock.h,程序将无法构建。编译器生成了太多错误
g++ -o "myGtest" ./myGtest.o ./src_code.o -lgtest -lgmock -lpthread
请帮我解决这个问题。
对了,我还有一个问题:
假设我有一个简单的模块Csrc_code.c,例如:
我正在测试函数,在函数调用测试时,我想重新路由程序不执行这个测试,它会跳转到我自定义的测试 例如,在 myGtest.cpp 中,我写:
int test(int a) {
printf("overridden successful !\n");
return a;
}
此技术是模拟或存根或虚拟函数。
请给我详细信息,我如何通过 Gtest 框架模拟被测模块中的内部函数?请举个例子。
我已尝试在此站点上找到以前 post 的解决方案。
但是,我没有想出答案。
请参阅这篇关于如何使用 eclipse 设置 google 测试的文章:
http://www.codeproject.com/Articles/811934/Cplusplus-unit-test-start-guide-how-to-set-up-Goog
关于你的第二个问题: Google Mock 用于模拟接口。您可以设置期望并定义接口功能的操作。所以你的 'test' 函数必须是接口的一部分才能模拟它。
请从本教程开始:
https://github.com/google/googletest/blob/master/googlemock/docs/ForDummies.md
我认为主要原因是Gtest和Gmock的版本不匹配。 我从 google:
的一个来源得到它们https://github.com/google/googletest/tree/master/googletest
并进行了上述配置。它对我来说很好。
Gmock 配置 [Eclipse Mar - Ubuntu 14.04 LTS]
从 google github
克隆主资源git 克隆 https://github.com/google/googletest.git GoogleTest/
安装 Cmake:
sudo apt-get 安装 cmake
通过 Cmake 构建主 Gtest 项目:
cd GoogleTest/googlemock
sudo cmake CMakeLists.txt
sudo make
我们将获取日志信息:
Scanning dependencies of target gmock
[ 14%] Building CXX object CMakeFiles/gmock.dir/home/thaohm2/FPT/Softs/GoogleTest/googletest/src/gtest-all.cc.o
[ 28%] Building CXX object CMakeFiles/gmock.dir/src/gmock-all.cc.o
Linking CXX static library libgmock.a
[ 28%] Built target gmock
Scanning dependencies of target gmock_main
[ 42%] Building CXX object CMakeFiles/gmock_main.dir/home/thaohm2/FPT/Softs/GoogleTest/googletest/src/gtest-all.cc.o
[ 57%] Building CXX object CMakeFiles/gmock_main.dir/src/gmock-all.cc.o
[ 71%] Building CXX object CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
Linking CXX static library libgmock_main.a
[ 71%] Built target gmock_main
Scanning dependencies of target gtest
[ 85%] Building CXX object gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
Linking CXX static library libgtest.a
[ 85%] Built target gtest
Scanning dependencies of target gtest_main
[100%] Building CXX object gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
Linking CXX static library libgtest_main.a
[100%] Built target gtest_main
Four static libraries are generate:
libgmock.a libgmock_main.a libgtest.a libgtest_main.a
我们需要将所有*.a文件复制到/usr/lib:
sudo cp *.a /usr/lib
sudo cp gtest/*.a /usr/lib
并将gmock和gtest必要的库复制到/usr/include
sudo cp -r include/gmock /usr/include/
sudo cp -r ../googletest/include/gtest/ /usr/include/
- 创建一个新的 C++ 项目并将 "gmock" 和 "pthread" 选项添加到链接器库 右击项目 --> Properties --> C/C++ Builder --> Setting --> Tool Settings --> GCC C++ Linker --> Libraries 添加... gmock pthread
请注意,gmock 必须是 pthread 的 frond。
将gmock和gtest添加到你的项目中并进行项目编译:
包括
包括
//...
int main(int argc, char *argv[]) { ::测试::InitGoogleMock(&argc, argv); return RUN_ALL_TESTS(); }
输出:
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (0 ms total)
[ PASSED ] 0 tests.
完成。