Ошибка связи при добавлении модульных тестов в устаревшее решение - PullRequest
0 голосов
/ 22 мая 2018

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

Наше приложение построено с использованием Visual Studio 2017. Решение содержит 17 проектов.Большинство из них разработано другой командой (в основном сторонней библиотекой с нашей точки зрения), и большинство проектов создают файл dll.Один проект настроен на сборку исполняемого файла.

Это тот самый exe-проект, который я не могу протестировать.Я пробовал оба Boost :: Test и Google.Test.Когда я пытаюсь написать тесты, используя класс, определенный в одном из проектов dll, он работает как ожидалось.

Но когда я пытаюсь протестировать код из exe-проекта, я получаю ошибки компоновщика LNK2019 "Unresolved external symbol"для кода, определенного в проекте exe.Каталоги включения установлены правильно, тестовый проект ссылается на соответствующие другие проекты.Я в растерянности.

После некоторого онлайн-поиска и настройки новых тестовых решений я обнаружил две возможные причины:

  • Невозможно протестировать код в проекте, производящемexe-файл
  • Не удается протестировать код в проектах, скомпилированных с помощью __stdcall

Может ли это быть причиной ошибки компоновщика?И если да, то как мне исправить ошибку?

1 Ответ

0 голосов
/ 23 мая 2018

Вы не можете (напрямую) модульно протестировать проект, который создает исполняемый файл.Среда модульного тестирования должна создать исполняемый файл для запуска (и оценки) модульных тестов, поэтому в проекте вы получите два main () ...

Я могу только предложить следующее: Преобразоватьисполняемый проект в библиотечный проект (независимо от того, является ли он DLL-библиотекой или статической библиотекой) и переместите (надеюсь) небольшой кусочек кода, который находится в main (), в другой проект, который свяжет (теперь библиотечный) проект висполняемый файлЕсли ваш main () имеет много кода, вы можете подумать о том, чтобы превратить его в статическую функцию, а затем вызвать эту статическую функцию (и, следовательно, запустить ваше приложение) из «new» main () в «new» исполняемом проекте.

Затем вы можете протестировать свой проект, как и любой другой «библиотечный» проект, и у вас нет соответствующего кода для тестирования в вашем исполняемом проекте.

...