Подтвердить что ты не робот

Могу ли я связать несколько тестов модулей BOOST с одним тестовым двоичным кодом?

Недавно я начал пытаться тестировать почтенную и большую ( > 1 млн. строк) программу. В настоящее время нет единичных тестов. Кроме того, программа связана как связанный друг с другом отдельный файл - нет библиотек компонентов. Кроме того, объекты сильно взаимозависимы, и трудно (невозможно?) Связываться с любыми объектными файлами, не связывая их хотя бы с половиной из них.

Да, я знаю, моя жизнь отстой.

Я бы хотел сделать некоторые рефакторинг (очевидно), но я бы хотел, чтобы некоторые тесты были на месте, прежде чем я начну перемещаться. Моя идея состоит в том, чтобы скомпилировать одну "тестовую программу", которая запускает все те тесты, которые я создаю. Это значительно упростило бы проблемы связи, которые у меня есть, и позвольте мне сосредоточиться на реальных проблемах. Поэтому у меня есть два вопроса:

  • Возможно ли связать несколько файлов BOOST unit test в один тестовый исполняемый файл?
  • Есть ли лучшее решение?
4b9b3361

Ответ 1

Я предполагаю, что это именно то, как использовать boost-тест. Я бы сохранил один короткий файл main.cpp, состоящий из буквально двух строк:

#define BOOST_TEST_MODULE "C++ Unit Tests for MyTangledLibrary"
#include <boost/test/included/unit_test.hpp>

И тогда я буду добавлять файлы тестового модуля *.cpp, скомпилированные в один исполняемый файл

#include <boost/test/unit_test.hpp>
<< your include files >>

BOOST_AUTO_TEST_SUITE(FancyShmancyLogic)

BOOST_AUTO_TEST_CASE(TestingIf2x3equals6)
{
  ...
}

BOOST_AUTO_TEST_CASE(TestingIf2x2equals4)
{
  ...
}

BOOST_AUTO_TEST_SUITE_END()

Да, вы сможете скомпилировать этот main.cpp и все ваши модули в один большой исполняемый файл.

Ответ 2

Альтернативный подход следует из  http://neyasystems.com/an-engineers-guide-to-unit-testing-cmake-and-boost-unit-tests/, где вы не создаете один файл, но все же enable_testing() в файле cmake позволяет вам вызывать все тесты на один раз с вашим генератором. Если ваш генератор сделан, тогда он просто делает тест.