无法使用 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 框架:

  1. 安装 gtest 平台:

    $ sudo apt-get install libgtest-dev #gtest

    $ sudo apt-get install google-mock #gmock

  2. 然后,安装Cmake:

    $ sudo apt-get install cmake

  3. 并构建 2 个项目(gtest 和 gmock)

    $ cd /usr/src/gtest

    $ sudo cmake CMakeLists.txt

    $ cd /usr/src/gmock

    $ sudo cmake CMakeLists.txt

    $ sudo make

  4. 最后将所有*.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

Hình ảnh nội tuyến

请帮我解决这个问题。

对了,我还有一个问题:

假设我有一个简单的模块Csrc_code.c,例如:

Hình ảnh nội tuyến

我正在测试函数,在函数调用测试时,我想重新路由程序不执行这个测试,它会跳转到我自定义的测试 例如,在 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]

  1. 从 google github

    克隆主资源

    git 克隆 https://github.com/google/googletest.git GoogleTest/

  2. 安装 Cmake:

    sudo apt-get 安装 cmake

  3. 通过 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
  1. 我们需要将所有*.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/
  1. 创建一个新的 C++ 项目并将 "gmock" 和 "pthread" 选项添加到链接器库 右击项目 --> Properties --> C/C++ Builder --> Setting --> Tool Settings --> GCC C++ Linker --> Libraries 添加... gmock pthread

请注意,gmock 必须是 pthread 的 frond。

  1. 将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.

完成。