2017-01-26 16 views
1

Это первый раз, когда я хочу использовать модульные тесты в моем проекте на C++. Следовательно, у меня много существующих классов, для которых я буду писать тесты (по крайней мере для некоторых из них). Кроме того, приложение имеет, конечно, функцию main().Путаница об модульных тестах (googletest) и проектах/папках/файлах

Я использую qt creator с qmake, но также могу переключиться на cmake. Проект, qt creator и qmake работают хорошо.

Мое замешательство теперь, как добавить модульный тест? Я намерен использовать googletest. Я уже провел тест в новом проекте, тестируя некоторую фиктивную функцию add(int, int), со всем в одном файле (функция, тесты и основная). Как это работает с существующим проектом (который имеет свой собственный main()). Нужно ли мне настроить второй проект и включить заголовки в тестовые файлы? Что такое хорошая структура папок для этого?

+1

Один простой способ - создать lib, ваше приложение будет «только» иметь «главное», оно нормально вызовет класс/функцию lib. Затем ваше тестовое приложение также может ссылаться на вашу библиотеку и тестировать ее компоненты. (Всего 3 проекта: MyLib, MyApp, MyTest). – Jarod42

+1

Это, безусловно, лучше, если ваши тесты во втором проекте. [Этот проект] (https://github.com/nholthaus/units) (который я автор) имеет gtest, встроенный в CMake, вы можете буквально скопировать/вставить файлы CMake, чтобы сойти с земли, и посмотреть пример структуры папок. –

ответ

2

На мой взгляд, лучший подход заключается в создании модели библиотеки а (со всем кодом производства), программа исполняемым и тест исполняемый. Затем вы можете связать весь производственный код с программой и протестировать исполняемый файл. Тестируемые файлы также хранятся в тестовом исполняемом файле. Все мои проекты имеют следующую структуру:

model.lib (link against both exe) 
program.exe 
modelTest.exe 

В конкретной папке на вашей файловой системе могут храниться тестовые и производственные файлы. Инструмент построения (например, cmake) должен отделять файлы и помещать тестовые файлы в тестовый исполняемый файл и производственные файлы в модель-библиотеку.

Рассмотрим следующий пример: У меня есть папка со следующими файлами:

src (folder) 
- main.cpp 
- model.h 
- model.cpp 
- modelTest.cpp 

Файл CMake может выглядеть следующим образом:

cmake_minimum_required(VERSION 2.8) 
project(TheUltimateProject) 
ADD_EXECUTABLE(program main.cpp) 
ADD_library(model shared model.cpp model.h) 
ADD_EXECUTABLE(modelTest modelTest.cpp) 

target_link_libraries(program model) 
target_link_libraries(modelTest model) 

Если вы используете испытательную-структуры, как Google test, вам также необходимо связать исполняемый файл modelTest с gmock и не забудьте добавить папку include:

eg

link_directories($ENV{GMOCK_HOME}/Debug) 
include_directories($ENV{GMOCK_HOME}/googlemock/include) 
include_directories($ENV{GMOCK_HOME}/googletest/include) 
target_link_libraries(modelTest gmock_main gmock)