Повышающий тест не init_unit_test_suite

Я запускаю этот кусок кода

#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK

#include <boost/test/unit_test.hpp>
#include <boost/test/unit_test_log.hpp>
#include <boost/filesystem/fstream.hpp>

#include <iostream>

using namespace boost::unit_test;
using namespace std;void TestFoo()
{
BOOST_CHECK(0==0);
}

test_suite* init_unit_test_suite( int argc, char* argv[] )
{
std::cout << "Enter init_unit_test_suite" << endl;
boost::unit_test::test_suite* master_test_suite =
BOOST_TEST_SUITE( "MasterTestSuite" );
master_test_suite->add(BOOST_TEST_CASE(&TestFoo));
return master_test_suite;

}

Но во время выполнения это говорит

Ошибка настройки теста: тестовое дерево пусто

Почему он не запускает функцию init_unit_test_suite?

9

Решение

Вы на самом деле динамически связывались с библиотекой фреймворка boost_unit_test? Кроме того, сочетание ручной регистрации теста и определения BOOST_TEST_MAIN не работает. Динамическая библиотека требует немного других процедур инициализации.

Самый простой способ избежать этого препятствия — это использовать автоматическая регистрация теста

#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK

#include <boost/test/unit_test.hpp>
#include <boost/test/unit_test_log.hpp>
#include <boost/filesystem/fstream.hpp>

#include <iostream>

using namespace boost::unit_test;
using namespace std;

BOOST_AUTO_TEST_SUITE(MasterSuite)

BOOST_AUTO_TEST_CASE(TestFoo)
{
BOOST_CHECK(0==0);
}

BOOST_AUTO_TEST_SUITE_END()

Это более надежно и лучше масштабируется, когда вы добавляете все больше и больше тестов.

1

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

У меня была точно такая же проблема. Помимо перехода на автоматическая регистрация теста, как предложено предварительно, Вы также можете использовать статическое связывание, то есть, заменив

#define BOOST_TEST_DYN_LINK

с

#define BOOST_TEST_STATIC_LINK

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

Самый простой способ исправить это — […] связать со статической библиотекой.

API init динамической библиотеки немного отличается от 1.34.1, и это
Причину ошибки вы видите. Функция init_unit_test_suite не вызывается в этом
дело.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector