использование googletest в eclipse: как?

Я загрузил тест Google, но теперь я понятия не имею, как связать его с моим проектом в eclipse. Должен ли я добавить его в качестве исходной папки? Должен включать его как включенную библиотеку g++? И как тогда запустить тест?


person user478310    schedule 17.10.2010    source источник
comment
Первоначально Google рекомендовал связываться с библиотекой, но позже они изменили свою рекомендацию после того, как у них было много неудачного опыта. Библиотека собирается с использованием определенных опций компилятора. Если тестовый пример и программное обеспечение не построены с одинаковыми параметрами, все может пойти не так — либо катастрофически, либо незаметно. Итак, теперь они рекомендуют включать исходный код Gtest в каждый тестовый пример и собирать его как единое целое, а не с Gtest как связанной библиотекой. См. code.google.com/p/googletest/wiki/   -  person Mawg says reinstate Monica    schedule 18.08.2015


Ответы (5)


Используя отличный ответ Риги, вот краткое изложение того, как я его получил работать:

  1. Создал новый проект С++ в Eclipse (я выбрал «Исполняемый файл» > «Пустой проект»).
  2. Скачал googletest 1.5.0, разархивировал и запустил ./scripts/fuse_gtest_files.py . <project-dir>/contrib
  3. Вернувшись в Eclipse, исключил каталог contrib из конфигурации сборки Release и добавил <project-dir>/contrib во включаемые каталоги (странно, я знаю).
  4. Добавлен каталог src и добавлен класс с именем Foo (см. ниже содержимое Foo.h — я пока оставил Foo.cpp пустым)
  5. Добавлен каталог test в Eclipse, исключен его из конфигурации сборки Release, добавлен <project-dir>/contrib во включаемые каталоги и добавлены новые исходные файлы FooTest.cpp и AllTests.cpp (содержимое см. ниже)
  6. Создал и запустил проект!

Фу.ч:

#ifndef FOO_H_
#define FOO_H_
class Foo {
public:
  virtual ~Foo();
  Foo();
  bool foo(void) { return true; }
};
#endif /* FOO_H_ */

Футест.cpp:

#include "gtest/gtest.h"
#include "Foo.h"
namespace {
  class FooTest : public ::testing::Test {
  protected:
    Foo foo;
  };
  TEST_F(FooTest, Foo) {
    ASSERT_TRUE(foo.foo());
  }
}

AllTests.cpp:

#include "gtest/gtest.h"
#include "FooTest.cpp"
int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

Вот подробные шаги:

  1. В Eclipse откройте меню Файл и выберите Создать > Проект C++.
  2. Тип проекта: Исполняемый > Пустой проект
  3. Набор инструментов: Linux GCC
  4. Нажмите Готово.
  5. Откройте терминал и cd /tmp
  6. wget http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2
  7. cd gtest-1.5.0/
  8. ./scripts/fuse_gtest_files.py . <project-dir>/contrib
  9. Вернувшись в Eclipse, щелкните правой кнопкой мыши папку проекта на панели Project Explorer и выберите Обновить.
  10. В панели Project Explorer щелкните правой кнопкой мыши папку contrib, выберите Исключить из сборки...*, снимите флажок только с поля **Выпуск и нажмите ОК.
  11. Щелкните правой кнопкой мыши папку contrib и выберите Свойства > Сборка C/C++ > Настройки > вкладка Настройки инструмента > Компилятор GCC C++ > Каталоги
  12. Нажмите кнопку Добавить..., затем кнопку Рабочее пространство..., затем выберите <project-name>/contrib и нажмите ОК, чтобы добавить каталог.
  13. Нажмите ОК еще раз, чтобы принять изменения в настройках сборки.
  14. Щелкните правой кнопкой мыши проект в панели Project Explorer и выберите Создать > Папка, введите src в качестве его имени и нажмите ОК.
  15. Щелкните правой кнопкой мыши папку src в панели Project Explorer и выберите Создать > Класс, назовите его Foo, затем нажмите ОК (см. содержимое Foo.h; Foo.cpp можно оставить как есть)
  16. Щелкните правой кнопкой мыши проект в панели Project Explorer и выберите Создать > Папка, введите test в качестве его имени и нажмите ОК.
  17. Выполните шаги, описанные выше, чтобы добавить каталоги <project-name>/contrib и <project-name>/src в качестве включаемых каталогов в каталог test.
  18. Щелкните правой кнопкой мыши папку test, затем выберите Создать > Исходный файл, чтобы добавить AllTests.cpp в папку test, затем повторите те же действия, чтобы добавить FooTest.cpp (содержание см. выше).
  19. Щелкните правой кнопкой мыши FooTest.cpp и выберите Исключить из сборки..., нажмите кнопку Выбрать все, затем ОК.
  20. Щелкните проект правой кнопкой мыши на панели Project Explorer и выберите Свойства > Сборка C/C++ > Настройки > Настройки инструмента< /strong> вкладка > Компоновщик GCC C++ > Библиотеки, затем нажмите кнопку Добавить... и введите pthread. (требуется googletest), нажмите ОК, чтобы добавить библиотеку, затем еще раз ОК, чтобы принять изменения.
  21. Нажмите Ctrl-b, чтобы построить проект.
  22. Нажмите Ctrl-F11, чтобы запустить проект.
  23. Победа!
person Josh Glover    schedule 27.04.2011
comment
У меня есть другой файл в моей основной папке src (не test/src), который имеет основную функцию, и проект не будет создаваться, потому что AllTests также содержит основную функцию. Я делаю что-то не так здесь? - person Aly; 12.10.2012
comment
Я не вижу Исключить из сборки на шаге .10. Вы можете помочь мне? - person eeadev; 04.09.2013
comment
Я отвечаю себе: для моего затмения Кеплера вы должны следовать этому: щелкните правой кнопкой мыши->свойства->c/c++build->настройки->исключить... - person eeadev; 04.09.2013
comment
в кратком описании вы забыли добавить ste 19. Вам нужно добавить pthread в библиотеки проекта. - person Henry Aloni; 24.09.2013
comment
где tmp в винде? - person newbie; 11.08.2014
comment
@Josh На шаге 10 не следует ли отмечать только выпуск, а не снимать только выпуск? - person texens; 08.11.2017

Шаг 1. Установите Eclipse

Если Eclipse еще не установлен на компьютере, загрузите последнюю версию Eclipse IDE для разработчиков C/C++ со страницы загрузки Eclipse (http://www.eclipse.org/downloads/).

Если Eclipse уже установлен, но только для Java, загрузите подключаемый модуль C++, следуя этим инструкциям.

а. Откройте Eclipse и нажмите Help->Install New Software.

введите здесь описание изображения

б. В поле Работа с: введите http://download.eclipse.org/tools/cdt/releases/kepler. Через несколько секунд поле Имя заполнится. Выберите следующие компоненты:

  • Основные возможности CDT -> Средства разработки C/C++
  • Основные возможности CDT - › SDK средств разработки C/C++
  • Дополнительные функции CDT - › Поддержка модульного тестирования C/C++
  • Дополнительные функции CDT - › Источник поддержки модульного тестирования C/C++
  • Дополнительные функции CDT - › Поддержка C/C++ Visual C++

введите здесь описание изображения

в. Нажмите «Далее», согласитесь с утверждениями, а затем «Готово».

Шаг 2. Загрузите Cygwin

Установите Cygwin, щелкнув ссылку setup-x86_64.exe на странице установки Cygwin (http://www.cygwin.com/install.html). После запуска нажимайте «Далее» по умолчанию, пока не дойдете до окна «Выбрать пакеты».

введите здесь описание изображения

Вам нужно будет найти и установить два пакета: gcc и make.

Первый поисковый запрос — gcc. Найдите gcc, а затем откройте папку Devel. Отметьте следующие пакеты для установки, нажав на слово Skip (затем оно изменится на номер сборки, который может быть больше, чем изображенный здесь): gcc-core, gcc-g++ и libgcc1.

введите здесь описание изображения

Второй поисковый запрос — make. Здесь нам понадобится только пакет make для Devel.

введите здесь описание изображения

После того, как они были выбраны, нажмите «Далее», чтобы установить.

Шаг 3. Загрузите и создайте тестовый проект Google.

Загрузите последнюю версию GoogleTest с https://code.google.com/p/googletest/downloads/list и распакуйте содержимое zip-файла в общий каталог. Важно, чтобы все пользователи имели доступ к этому каталогу.

(Примечание: в следующих командах используется make — последняя версия GoogleTest, в которой используется make, — это https://github.com/google/googletest/releases/tag/release-1.8.1. Для будущих версий GoogleTest используйте вместо этого cmake.)

Чтобы создать проект Google Test:

  1. Откройте Cygwin (найдите каталог установки Cygwin и дважды щелкните файл Cygwin.bat).
  2. Измените текущий рабочий каталог на разархивированный каталог make GoogleTest: cd c:/<<yourpath>>/gtest-1.7.0/make/
  3. Соберите проект: make
  4. Создайте архивную библиотеку из файла gtest-all.o: ar -rv libgtest.a gtest-all.o

Шаг 4. Добавьте каталог Cygwin bin в переменную PATH компьютеров

Следуйте инструкциям на этой странице для вашей версии Windows: http://www.java.com/en/download/help/path.xml, чтобы добавить каталог bin Cygwins в переменную среды PATH компьютеров. (обычно путем добавления ;C:\cygwin64\bin в конец текущего значения).

Шаг 5. Создайте новый проект, использующий GoogleTest.

Запустите Eclipse и выберите File->New->C++ Project. Введите значения ниже и нажмите «Готово».

введите здесь описание изображения

В Project Explore щелкните правой кнопкой мыши имя проекта и выберите «Свойства». В разделе C/C++ Build измените тип Builder на Internal Builder.

введите здесь описание изображения

В разделе «Сборка C/C++» выберите «Настройки», затем щелкните папку «Включает» в разделе «Компилятор Cygwin C++». Нажмите кнопку «Добавить» в верхнем поле, а затем перейдите к папке включения GoogleTest.

введите здесь описание изображения

Наконец, в папке Cygwin C++ Linker выберите «Разное», а затем щелкните значок «Добавить» в разделе «Другие объекты». Найдите файл libgtest.a, который вы создали на шаге 3 (он должен находиться в каталоге make разархивированной папки gtest).

введите здесь описание изображения

Вот и все! Теперь вы готовы попробовать это.

Шаг 6. Напишите код, использующий GoogleTest

  • Добавьте исходную папку, нажав Файл->Создать->Исходная папка. Назовите это src.
  • Добавьте файл заголовка, щелкнув правой кнопкой мыши папку src и выбрав New->Header File. Назовите этот файл Counter.h.
  • Добавьте исходный файл, щелкнув правой кнопкой мыши папку src и выбрав New->Source File. Назовите этот файл Counter.cpp.
  • Добавьте еще один исходный файл и назовите его Counter_Tests.cpp.

Скопируйте и вставьте приведенный ниже код в соответствующие файлы:

Счетчик.h

class Counter { 
private: 
      int mCounter;
public:    
      Counter() : mCounter(0) {}  
      int Increment();    
};

Счетчик.cpp

#include <stdio.h>
#include "Counter.h"

int Counter::Increment() {    
      return mCounter++;
}

Counter_Tests.cpp

#include "gtest/gtest.h"
#include "Counter.h"

TEST(Counter, Increment) {
      Counter c;    
      EXPECT_EQ(0, c.Increment());
      EXPECT_EQ(1, c.Increment());
      EXPECT_EQ(2, c.Increment());
}

int main(int argc, char **argv) {    
      ::testing::InitGoogleTest(&argc, argv);
      return RUN_ALL_TESTS();
}

В меню «Проект» выберите «Построить все». Теперь, чтобы подключить платформу модульного тестирования GoogleTest, выберите «Выполнить конфигурации» в меню «Выполнить». В этом диалоговом окне выберите модуль C/C++ и нажмите кнопку «Создать».

введите здесь описание изображения

Он должен автоматически заполнить это имя проекта в приложении C/C++, если нет, нажмите «Поиск проекта», чтобы выбрать этот проект. Затем перейдите на вкладку Тестирование C/C++. В раскрывающемся списке Tests Runner выберите Google Tests Runner, а затем нажмите «Выполнить», чтобы увидеть волшебство!

введите здесь описание изображения

Ниже снимок результата. Написав больше кода/тестов, вы можете нажать кнопку, выделенную красным, чтобы быстро перекомпилировать и повторно запустить все тесты.

введите здесь описание изображения

person rundavidrun    schedule 28.04.2014
comment
большое спасибо за этот подробный урок. Только одна вещь: мой тестовый фреймворк Google не сгенерировал libgtest.a, поэтому мне пришлось кататься на лыжах; шаги 3.4 и последний шаг 5. Но в конце все заработало как часы. еще раз спасибо. - person narengi; 13.06.2015

Вы не должны добавлять его в исходную папку, вместо этого создайте отдельную папку. Это сделано для того, чтобы избежать зависимости вашего производственного кода от тестового проекта. Сделай это так

../ #your project folder
Makefile
src/
  module1 #some module
  module2 #another module
build #tmp for build
dist #binaries 
contrib/
  gtest
  ...
test/ #your test project folder
  Makefile
  src/
    module1 #correspondent to main project's one
    module2 #correspondent to main project's one
  build
  dist
  ...

Я обычно использую гугл тест в виде двух файлов, это очень удобно. Используйте scripts/fuse_gtest_files.py из дистрибутива gtest для их извлечения. Имея всего два файла, вы можете включить их компиляцию в компиляцию вашего тестового проекта и иметь простую структуру проекта.

В ваших тестовых проектах укажите включаемые каталоги ../contrib:../src:src. Таким образом, вы можете включать такие заголовки

тест/источник/модуль1/класс1Test.h:

#include "gtest/gtest.h"
#include "module1/class1.h"

// test class1 here
// ...

тест/src/mainTest.cpp:

#include "gtest/gtest.h"
#include "module1/class1Test.h"
#include "module2/class2Test.h"
// include other tests you have
// ...

int main(int argc, char** argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}
person Riga    schedule 27.04.2011

Вот мое решение для Eclipse 4.3 и CDT 8.2. Мне показалось, что это несколько проще, чем описано выше.

  1. Загрузите gtest и установите его, как описано в readme.txt (используя cmake и make в linux)

  2. Перейдите в «Ваш проект-> Свойства-> Сборка C/C++-> Настройки-> Компилятор GCC C++-> Включает-> Включить пути» и добавьте папку включения в gtest.

  3. Перейдите в "YourProject-> Properties-> C/C++ Build-> Settings-> GCC C++ Linker-> Libraries", добавьте папку gtest в качестве пути поиска и добавьте библиотеки "gtest" и "pthread"

(4. Если у вас есть тесты в том же проекте, что и исходники, исключайте тесты из релизной сборки)

  1. Перейдите в «Выполнить-> Конфигурации запуска ...» и создайте новую конфигурацию запуска модуля C/C++.

  2. Установите проект в свой проект и приложение C/C++ в свое приложение на главной вкладке. Установите Tests Runner на Google Test Runner на вкладке Тестирование C/C++.

(7. Уведомления об ошибках могут оставаться в графическом интерфейсе eclipse, в этом случае может помочь переиндексация проекта)

person BjornArnelid    schedule 12.02.2014

Я поставил ваше решение, и оно работает хорошо. Могу сказать, что для компиляции gtest не очень понятно в README. текст.

Я запустил make-файл в каталоге /make через консоль cygwin. В моем случае компилятор советует мне не находить библиотеку pthread. Поэтому я изменил строку

CXXFLAGS += -g -Wall -Wextra -pthread

и изменил его на

CXXFLAGS += -g -Wall -Wextra -lpthread

Я получаю результат gtest_main.a. Затем я переименовал этот файл в libgtest.a и скопировал его в C:\cygwin\lib directory.

Затем я настроил свой проект eclipse на использование cygwin и добавил gtest и pthread, как вы говорите... и это работает!

Я надеюсь, что это может помочь кому-то

person Chemado    schedule 10.09.2015