Я загрузил тест Google, но теперь я понятия не имею, как связать его с моим проектом в eclipse. Должен ли я добавить его в качестве исходной папки? Должен включать его как включенную библиотеку g++? И как тогда запустить тест?
использование googletest в eclipse: как?
Ответы (5)
Используя отличный ответ Риги, вот краткое изложение того, как я его получил работать:
- Создал новый проект С++ в Eclipse (я выбрал «Исполняемый файл» > «Пустой проект»).
- Скачал googletest 1.5.0, разархивировал и запустил
./scripts/fuse_gtest_files.py . <project-dir>/contrib
- Вернувшись в Eclipse, исключил каталог
contrib
из конфигурации сборки Release и добавил<project-dir>/contrib
во включаемые каталоги (странно, я знаю). - Добавлен каталог
src
и добавлен класс с именемFoo
(см. ниже содержимоеFoo.h
— я пока оставилFoo.cpp
пустым) - Добавлен каталог
test
в Eclipse, исключен его из конфигурации сборки Release, добавлен<project-dir>/contrib
во включаемые каталоги и добавлены новые исходные файлыFooTest.cpp
иAllTests.cpp
(содержимое см. ниже) - Создал и запустил проект!
Фу.ч:
#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();
}
Вот подробные шаги:
- В Eclipse откройте меню Файл и выберите Создать > Проект C++.
- Тип проекта: Исполняемый > Пустой проект
- Набор инструментов: Linux GCC
- Нажмите Готово.
- Откройте терминал и
cd /tmp
wget http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2
cd gtest-1.5.0/
./scripts/fuse_gtest_files.py . <project-dir>/contrib
- Вернувшись в Eclipse, щелкните правой кнопкой мыши папку проекта на панели Project Explorer и выберите Обновить.
- В панели Project Explorer щелкните правой кнопкой мыши папку
contrib
, выберите Исключить из сборки...*, снимите флажок только с поля **Выпуск и нажмите ОК. - Щелкните правой кнопкой мыши папку
contrib
и выберите Свойства > Сборка C/C++ > Настройки > вкладка Настройки инструмента > Компилятор GCC C++ > Каталоги - Нажмите кнопку Добавить..., затем кнопку Рабочее пространство..., затем выберите
<project-name>/contrib
и нажмите ОК, чтобы добавить каталог. - Нажмите ОК еще раз, чтобы принять изменения в настройках сборки.
- Щелкните правой кнопкой мыши проект в панели Project Explorer и выберите Создать > Папка, введите
src
в качестве его имени и нажмите ОК. - Щелкните правой кнопкой мыши папку
src
в панели Project Explorer и выберите Создать > Класс, назовите егоFoo
, затем нажмите ОК (см. содержимоеFoo.h
;Foo.cpp
можно оставить как есть) - Щелкните правой кнопкой мыши проект в панели Project Explorer и выберите Создать > Папка, введите
test
в качестве его имени и нажмите ОК. - Выполните шаги, описанные выше, чтобы добавить каталоги
<project-name>/contrib
и<project-name>/src
в качестве включаемых каталогов в каталогtest
. - Щелкните правой кнопкой мыши папку
test
, затем выберите Создать > Исходный файл, чтобы добавитьAllTests.cpp
в папкуtest
, затем повторите те же действия, чтобы добавитьFooTest.cpp
(содержание см. выше). - Щелкните правой кнопкой мыши
FooTest.cpp
и выберите Исключить из сборки..., нажмите кнопку Выбрать все, затем ОК. - Щелкните проект правой кнопкой мыши на панели Project Explorer и выберите Свойства > Сборка C/C++ > Настройки > Настройки инструмента< /strong> вкладка > Компоновщик GCC C++ > Библиотеки, затем нажмите кнопку Добавить... и введите pthread. (требуется googletest), нажмите ОК, чтобы добавить библиотеку, затем еще раз ОК, чтобы принять изменения.
- Нажмите Ctrl-b, чтобы построить проект.
- Нажмите Ctrl-F11, чтобы запустить проект.
- Победа!
Шаг 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:
- Откройте Cygwin (найдите каталог установки Cygwin и дважды щелкните файл Cygwin.bat).
- Измените текущий рабочий каталог на разархивированный каталог make GoogleTest:
cd c:/<<yourpath>>/gtest-1.7.0/make/
- Соберите проект:
make
- Создайте архивную библиотеку из файла 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, а затем нажмите «Выполнить», чтобы увидеть волшебство!
Ниже снимок результата. Написав больше кода/тестов, вы можете нажать кнопку, выделенную красным, чтобы быстро перекомпилировать и повторно запустить все тесты.
Вы не должны добавлять его в исходную папку, вместо этого создайте отдельную папку. Это сделано для того, чтобы избежать зависимости вашего производственного кода от тестового проекта. Сделай это так
../ #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();
}
Вот мое решение для Eclipse 4.3 и CDT 8.2. Мне показалось, что это несколько проще, чем описано выше.
Загрузите gtest и установите его, как описано в readme.txt (используя cmake и make в linux)
Перейдите в «Ваш проект-> Свойства-> Сборка C/C++-> Настройки-> Компилятор GCC C++-> Включает-> Включить пути» и добавьте папку включения в gtest.
Перейдите в "YourProject-> Properties-> C/C++ Build-> Settings-> GCC C++ Linker-> Libraries", добавьте папку gtest в качестве пути поиска и добавьте библиотеки "gtest" и "pthread"
(4. Если у вас есть тесты в том же проекте, что и исходники, исключайте тесты из релизной сборки)
Перейдите в «Выполнить-> Конфигурации запуска ...» и создайте новую конфигурацию запуска модуля C/C++.
Установите проект в свой проект и приложение C/C++ в свое приложение на главной вкладке. Установите Tests Runner на Google Test Runner на вкладке Тестирование C/C++.
(7. Уведомления об ошибках могут оставаться в графическом интерфейсе eclipse, в этом случае может помочь переиндексация проекта)
Я поставил ваше решение, и оно работает хорошо. Могу сказать, что для компиляции 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, как вы говорите... и это работает!
Я надеюсь, что это может помочь кому-то