Невозможно собрать программу на C / C ++ с помощью gmock / gmock.h, генерируется слишком много ошибок

Разбираюсь с тестовой платформой Google. Я надеюсь, что, возможно, эта платформа Gtest поможет моему текущему проекту.

Итак, я не видел никакого руководства от команды Gtest, которое объясняло бы, как создать новый проект и скомпилировать проект, включая библиотеки «gmock / gmork» и «gtest / gtest.h».

Я скачал проект Gtest из репо: google / googletest

Сделайте несколько шагов, чтобы иметь возможность использовать Gtest framework:

  1. Платформа Intall 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

Я создал новый проект через Eclipse C в Ubuntu 14.04 LTS. Когда я включил 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

Пожалуйста, помогите мне решить эту проблему.

Кстати, у меня есть еще один вопрос:

Предположим, что у меня есть простой модуль C src_code.c, например:

Hình ảnh nội tuyến

Я тестирую функцию, в функции вызывает тест, я хотел бы перенаправить программу, чтобы она не выполняла этот тест, и она перейдет к моему самоопределенному тесту, например, в myGtest.cpp я пишу:

int test(int a) {
    printf("overridden successful !\n");
    return a;
}

Этот метод является имитацией, заглушкой или фиктивной функцией.

Пожалуйста, дайте мне подробную информацию, КАК я могу имитировать внутреннюю функцию в тестируемом модуле через Gtest framework? Пожалуйста, дайте мне пример.

Я пытался найти решение в предыдущем посте на этом сайте.

Но я не понял своего ответа.


person Thảo M. Hoàng    schedule 18.03.2016    source источник


Ответы (3)


Конфигурация Gmock [Eclipse Mar - Ubuntu 14.04 LTS]

  1. Клонировать главный ресурс из google github

    git clone https://github.com/google/googletest.git GoogleTest /

  2. Установите Cmake:

    sudo apt-get install cmake

  3. Мастер сборки проекта Gtest от Cmake:

    компакт-диск 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» в библиотеку компоновщика. Щелкните правой кнопкой мыши Project -> Properties -> C / C ++ Builder -> Setting -> Tool Settings -> GCC C ++ Linker - > Библиотеки Добавить ... gmock pthread

Обратите внимание, что gmock по порядку должен быть перед pthread.

  1. Включите в свой проект gmock и gtest и выполните компиляцию проекта:

    включают

    включают

    //...

    int main (int argc, char * argv []) {:: тестирование :: InitGoogleMock (& ​​argc, argv); вернуть RUN_ALL_TESTS (); }

Вывод:

[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (0 ms total)
[  PASSED  ] 0 tests.

Сделанный.

person Thảo M. Hoàng    schedule 25.04.2016
comment
#include ‹gmock / gmock.h› #include ‹gtest / gtest / h› // ... ошибка отображения - person Thảo M. Hoàng; 25.04.2016

Обратитесь к этой статье о том, как настроить тест Google с помощью eclipse:

http://www.codeproject.com/Articles/811934/Cplusplus-unit-test-start-guide-how-to-set-up-Goog

Что касается вашего второго вопроса: Google Mock предназначен для имитации интерфейсов. Вы можете установить ожидания и определить действия функций интерфейса. Итак, ваша «тестовая» функция должна быть частью интерфейса, чтобы иметь возможность имитировать ее.

Начните с этого урока:

https://github.com/google/googletest/blob/master/googlemock/docs/ForDummies.md

person MIbrah    schedule 18.03.2016
comment
Спасибо за Ваш ответ. Но это все еще не тот ответ, который мне нужен. Я хотел бы спросить: предположим, у меня есть int __wrap_test (int), я хочу, чтобы при вызове test () вместо test () вызывался __wrap_test (int), который я использую: EXPECT_CALL (mock_test, test (0)) .WillOnce (Invoke (this, & BTest :: __ wrap_test)); Но это кажется невозможным. Есть ли у вас какие-либо идеи ? - person Thảo M. Hoàng; 04.04.2016

Думаю, основная причина - несоответствие версий Gtest и Gmock. Я получил их из одного источника в Google:

https://github.com/google/googletest/tree/master/googletest

И провел вышеуказанную настройку. У меня это сработало.

person Thảo M. Hoàng    schedule 13.04.2016