BOOST.TEST Проблемы с тестовыми кейсами BOOST в dll и runner в exe

Я использую Boost.Test для моего модульного тестирования. Я хотел бы, чтобы весь тестовый код находился в отдельной dll, чтобы тестовый код не доставлялся, и мой производственный код не раздулся.

Для этого я рассмотрел наличие ручных тестовых случаев в dll и иметь dll экспортировать метод

// Test cases DLL code
// exported method
__declspec(dllexport) test_suite *GetTestSuite()
{
test_suite* ts1 = BOOST_TEST_SUITE( "manual_test_suite1" );
ts1->add( BOOST_TEST_CASE( &manual_test_case1 ) );
ts1->add( BOOST_TEST_CASE( &manual_test_case2 ) );
return ts1;
}

От моего тестового участника я могу вызвать этот метод внутри моего init_unit_test_suite как

bool init_unit_test_suite()
{
test_suite * ts = GetTestSuite();
framework::master_test_suite().add( ts );
return true;
}

Но контрольные примеры не подобраны. Тем не менее, тестовые случаи, которые у меня есть в тестовом центре, локально подбираются.

Я связываюсь со статической библиотекой BOOST и имею свой собственный основной, определяя

// Test runner app code
#define BOOST_TEST_NO_LIB
#define BOOST_TEST_NO_MAIN

в моем тесте бегуна.

Что не так с этой комбинацией? Как я могу добиться разделения тестовых случаев в отдельных библиотеках, а также иметь внешний тестер?

РЕДАКТИРОВАТЬ: командная строка, которую я использую для вызова тестовых случаев:

char *myargv[] = {"", "--log_level=test_suite", "report_level=detailed", "output_format=xml", "--run_test=manual_test_suite1"};
argc = _countof(myargv);
unit_test_main((init_unit_test_func) &init_unit_test_suite, argc, myargv );

Ошибка, которую я получаю с приведенной выше командной строкой:

Test setup error: no test cases matching filter

1

Решение

Я нашел проблему. Мой тестраннер динамически связывался с Boost.Test. Но мой тестовый dll статически связывался с Boost. Я изменил его на динамическое связывание, и теперь все работает нормально.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]