Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2016, 09:39   #1
mns_14
 
Регистрация: 26.05.2016
Сообщений: 6
По умолчанию Google test в Visual Studio 2013

Пытаюсь запустить пример sample1.cc из https://github.com/google/googletest...letest/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::TestBo dy(void)" (?TestBody@FactorialTest_Negative_T est@@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_Tes t@@EAEXXZ)
error LNK1120: 2 unresolved externals


Подскажите как делать правильно.

Последний раз редактировалось Alex11223; 26.05.2016 в 10:00.
mns_14 вне форума Ответить с цитированием
Старый 26.05.2016, 10:03   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Sample это что за проект? Обычно это делают в виде библиотеки, и подключают ее к проекту с тестами.

Например что-то типа такого https://github.com/fuatcoskun/GoogleTestVS2015
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 26.05.2016 в 10:07.
Alex11223 вне форума Ответить с цитированием
Старый 26.05.2016, 10:31   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

В TestSample добавьте линк на sample1.cc
p51x вне форума Ответить с цитированием
Старый 26.05.2016, 11:34   #4
mns_14
 
Регистрация: 26.05.2016
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Sample это что за проект?
Sample это проект который подлежит тестированию.
TestSample это проет с тестами.
В моём случае оба проекта были исполняемыми, т.е. .exe

Спасибо за ссылку.

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

Любой мало мальски сложный проект (Solution в Visual Studio) будет состоять из множества проектов. Нужно ли иметь один проект для тестирования или их должно быть много. При намерении покрыть тестами весь Solution получается, что весь код переедит в тестовый проект, что также скажется на времени компиляции.

По идее правильным решением было бы тестировать исходный код, а не библиотеку и в этом случае исходные файлы из разных проектов из Solution нужно подключать к тестовому проекту, что может вызвать (наверное) проблеы с одинаковыми именами файлов, классов и функций.
mns_14 вне форума Ответить с цитированием
Старый 26.05.2016, 11:37   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Вы мой пост читали? У вас в тестовом проект просто нет тел функции. Добавьте и все будет.
p51x вне форума Ответить с цитированием
Старый 26.05.2016, 11:40   #6
mns_14
 
Регистрация: 26.05.2016
Сообщений: 6
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
В TestSample добавьте линк на sample1.cc
Как это сделать?
Пробовал так:
Для проекта TestSample:
Project Properties -> Common Propertis -> References -> Add New References и добовлял проект Sample
В результате ошибки error LNK2019: unresolved external symbol
mns_14 вне форума Ответить с цитированием
Старый 26.05.2016, 11:51   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Не, add - existing item
p51x вне форума Ответить с цитированием
Старый 26.05.2016, 11:51   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
при любом изменении кода нужно перекомпилировать всю библиотеку
Зачем всю? В каком смысле всю? Вы ж и ехе так же компилируете.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.05.2016, 12:08   #9
mns_14
 
Регистрация: 26.05.2016
Сообщений: 6
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не, add - existing item
Спасибо, у меня конечно были подозрения.
Просто чтобы уточнить:
Допустим у меня есть Solution и в нём много проектов. Я создаю проект для тестирования, добавляю gtestd.h, добавляю Additional Include Directories для каждого проекта подлежащего тестированию и самое главное - Добавляю все .cpp файлы всех проектов в проект для тестирования через add - existing item.
А что делать если названия файлов из разных проектов совпадут или такого быть не должно?
mns_14 вне форума Ответить с цитированием
Старый 26.05.2016, 12:13   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Все не надо. Надо только то, что тестите и зависимые.

Цитата:
А что делать если названия файлов из разных проектов совпадут или такого быть не должно?
Теоретически можно через отдельные папки разнести.. Только если у вас в солюшене в нескольких проектах есть файлы с одинаковыми именами и делаю разное, то это как-то не так идеологически.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual studio 2013 MarineKing Фриланс 0 28.05.2015 16:26
C++ visual studio 2013 mystafa23 Общие вопросы C/C++ 1 15.11.2014 21:07
C++ visual studio 2013 mystafa23 Общие вопросы C/C++ 10 15.11.2014 20:02
C++ visual studio 2013 mystafa23 Общие вопросы C/C++ 3 20.10.2014 07:16
Интерфейс приложений в стиле Office 2013, Visual Studio 2012/2013, Adobe CC nnmserg WPF, UWP, WinRT, XAML 2 12.09.2014 12:41