2015-09-02 1 views
2

Я хочу предоставить свою собственную основную функцию при использовании Boost.Test. Поэтому я включил следующие макросы:Boost.Test - проблемы с переопределением основных

#define BOOST_TEST_ALTERNATIVE_INIT_API 
#define BOOST_TEST_NO_MAIN 

В моей главной функции У меня есть вызов:

::boost::unit_test::unit_test_main(&registering_all_tests, argc, argv) 

, но это дает мне следующую ошибку, когда сборка на OS X с помощью Xcode 6:

Undefined symbols for architecture x86_64: 
    "boost::unit_test::unit_test_main(bool (*)(), int, char**)", referenced from: 
     _main in main.o 

я узнал, что в том числе следующий файл:

#include <boost/test/included/unit_test.hpp> 

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

подпиточного руководство по началу работы утверждает, что:

Boost.Test может быть использован в «заголовок-только» или режим «отдельно составленный», хотя отдельный сборник рекомендуется для серьезного использования.

Я построил библиотеку отдельно.

подпиточного документ также утверждает:

В том числе UTF непосредственно в модуль

тест Если вы хотите, чтобы избежать отдельной библиотеки компиляции вы можете либо включать в себя все файлы, которые представляют собой статическую библиотеку в ваш файл makefile или включите их как часть исходного файла тестового модуля . Чтобы облегчить более поздний вариант, UTF представляет вариант использования одного заголовка . В любом случае в настройках вашей компиляции необязательных опций сборки или макроопределений не требуется. Но в этом случае применимы те же флаги, которые могут использоваться для автономной библиотеки . Хотя, , очевидно, ни BOOST_TEST_DYN_LINK, ни BOOST_TEST_NO_LIB не являются . Это решение может быть не лучшим выбором в долгосрочной перспективе, , так как для перекомпиляции источников UTF для каждого тестового модуля вы используете его с каждой заменой тестового модуля, который вы работаете . В результате ваше время цикла тестирования может увеличиться. Если стало утомительным, я рекомендую переключиться на одно из вариантов использования библиотеки .

Похоже, что, включив включенную (по сравнению с) версию модульной системы испытаний, я ошибаюсь.

Может кто-то прояснить правильный подход. В примерах переопределения основной информации не упоминается необходимость этого.

ответ

1

В последней версии Boost.Test documentation более подробно рассматривается по этому вопросу, чем в предыдущих версиях.

Построив модульное тестирование рамки статической библиотеку с определенным символом BOOST_TEST_NO_MAIN, то я могу предоставить свою собственную главную функцию, которая вызывает тест бегуна unit_test_main по умолчанию вручную с помощью функции инициализации по умолчанию init_unit_test в качестве первого аргумента:

int exitCode = ::boost::unit_test::unit_test_main(&init_unit_test_suite, argc, argv); 

Не нужно определять BOOST_TEST_ALTERNATIVE_INIT_API.