Google test в Visual Studio 2013

mns_14

Пытаюсь запустить пример sample1.cc из https://github.com/google/googletest/tree/master/googletest/samples и что-то как-то приуныл - не компилится. Делаю так: 1. Запускаю googletest/googletest/msvc/gtest.sln и компилирую. Появляются библиотеки gtestd.lib и gtest_maind.lib 2. Создаю новый Solution и в нём два проекта Sample и TestSample. 3. В проект Sample добавляю файлы sample1.cc, sample1.h и файл main.cpp из которого и вызываю функции из sample1.cc 4. В проект TestSample добавляю файл sample1_unittest.cc и в него функцию main из gtest_main.cc. Настройки проекта такие: Project Properties->Configuration Properties-> General -> Additional Include Directories указываю проект Sample, googletest, googletest\include Project Properties->Configuration Properties->Linker->General->Additional Library Directories указываю папку с библиотекой gtestd.lib Project Properties->Configuration Properties->Linker->Input->Additional Dependencies указываю gtestd.libКомпилирую TestSample получаю ошибки: error LNK2019: unresolved external symbol "int __cdecl Factorial(int)" (?Factorial@@YAHH@Z) referenced in function "private: virtual void __thiscall FactorialTest_Negative_Test::TestBody(void)" (?TestBody@FactorialTest_Negative_Test@@EAEXXZ) error LNK2019: unresolved external symbol "bool __cdecl IsPrime(int)" (?IsPrime@@YA_NH@Z) referenced in function "private: virtual void __thiscall IsPrimeTest_Negative_Test::TestBody(void)" (?TestBody@IsPrimeTest_Negative_Test@@EAEXXZ) error LNK1120: 2 unresolved externalsПодскажите как делать правильно.
6 ответов

mns_14

Подскажите как делать правильно.
подключайте gtest_maind.lib и исходники с тестами.функция main вам не нужна.gtestd.lib - это уже для продвинутых пользователей, которые уже понимают принцип сборки многофайлового проекта. и хотят его кастомизировать.


mns_14

gtestd.lib - это уже для продвинутых пользователей,
Смешно.Может просто расказать как делать правильно? Если вы работали с Goole Test раскажите как нужно делать, я думаю полезно будет многим.


mns_14

Смешно.
расскажите, что именно? может быть вместе посмеёмся?
как делать правильно?
а это для кого было?
подключайте gtest_maind.lib и исходники с тестами.
если поподробнее: 1. создаем обычный консольный проект (запускаемое приложение)2. указываем путь, где находятся хедера гугл-теста3. указываем пути, где находятся lib3. в дебаге линкуемся с gtest_maind.lib, в релизе - gtest_main.lib4. нужно убедиться что настройка рантайма с++ (/MD или /MT) у приложения такое же, как и у библиотек с которыми оно линкуется.если оно не совпадет, там выползут ошибки типа "эта стандартная хрень уже определена" и нужно просто заменить ключ на противоположный.4. добавляете в проект cpp файлы с исходным кодом тестов.5. компилируем/линкуем/запускаем6. PROFFIT!!!??????вообще, google-test тем и славен, что он элементарно собирается, и элементарно подключается.касательно файлов библиотек: gtest.lib содержит только саму библиотекуgtest_maind.lib содержит и библиотеку, и функцию main()в большинстве тестовых приложений main получается одинаковым. вот чтобы каждый раз не дублировать код, решили вынести его в библиотекуgtest.lib нужно использовать, когда возникла потребность в собственном main а такая потребность может быть, если потребовались нетривиальные настройки среды.например, можно установить собственные принтеры вместо стандартного, которые будут на почту отправлять рапорты программистам, в случае обнаружения ошибок в тестах.вести статистику, и тп.повторюсь: в большинстве случаев этого всего не нужно.


mns_14

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


mns_14

Можно копировать исходники GTest и GMock в каждый проект. Подключите так к 5 и более проектам и уже легко будет и можно не беспокоиться с запуском на любой машине, если кому-то перебросите или сохраните в облаке для себя или в удалённой системе контроля версиями, например, на github или bitbucketЯ делал по этой пошаговой инструкции


mns_14

Это понятно, но нужно ли добавлять в проект с тестами исходные файлы тестируемого проекта, иначе откуда тестовый проект узнает про тестируемый?
технически можно конечно. но обычно "тестируемый проект" - это библиотека, которая линкуется с тестовым приложением уже в собранном виде.