проблема с boost.test в старой версии

Я пытаюсь использовать boost.test в удаленной системе с Boost 1.33.1. На моем компьютере этот небольшой пример из http://www.boost.org/doc/libs/1_42_0/libs/test/doc/html/tutorials/hello-the-testing-world.html работает:

#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp> // I've changed here

int add( int i, int j ) { return i+j; }

BOOST_AUTO_TEST_CASE( my_test )   // <--- line 7
{
// seven ways to detect and report the same error:
BOOST_CHECK( add( 2,2 ) == 4 );        // #1 continues on error

BOOST_REQUIRE( add( 2,2 ) == 4 );      // #2 throws on error

if( add( 2,2 ) != 4 )
  BOOST_ERROR( "Ouch..." );            // #3 continues on error

if( add( 2,2 ) != 4 )
  BOOST_FAIL( "Ouch..." );             // #4 throws on error

if( add( 2,2 ) != 4 ) throw "Ouch..."; // #5 throws on error

BOOST_CHECK_MESSAGE( add( 2,2 ) == 4,  // #6 continues on error
                     "add(..) result: " << add( 2,2 ) );

BOOST_CHECK_EQUAL( add( 2,2 ), 4 );   // #7 continues on error
}

но в удаленной системе файл unit_test.hpp не существует. На моем компьютере файл unit_test_framework.hpp просто:

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

и он присутствует в основной системе. Поэтому я попытался изменить включение на:

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

но компилятор говорит:

main.cpp:7: error: expected constructor, destructor, or type conversion before ‘(’ token

что это? Как это решить?


person Ruggero Turra    schedule 06.12.2010    source источник
comment
В какой системе вы меняли включение?   -  person Mark Storer    schedule 06.12.2010
comment
Не могли бы вы сообщить нам, какая версия boost установлена ​​на вашей удаленной системе?   -  person jopasserat    schedule 06.12.2010
comment
удаленный: 1.33.1, локальный: 1.36.0   -  person Ruggero Turra    schedule 06.12.2010


Ответы (3)


В Boost 1.33 используйте:

#include <boost/test/auto_unit_test.hpp>

на месте:

#include <boost/test/unit_test.hpp>

а также перед #include добавить:

#define BOOST_AUTO_TEST_MAIN

или вы получите ошибку компоновщика

person KnucklesTheDog    schedule 24.10.2012

Если ваша версия boost старше 1.33, попробуйте переименовать BOOST_AUTO_TEST_CASE в BOOST_AUTO_UNIT_TEST, и это не должно нарушать компиляцию в более новых версиях boost.

См. эти примечания к выпуску 1.33 Boost.Test :

BOOST_AUTO_UNIT_TEST переименован в BOOST_AUTO_TEST_CASE. Старое имя все еще используется, но устарело

person icecrime    schedule 06.12.2010
comment
У меня точно такое же сообщение. Я думаю, что BOOST_AUTO_TEST_CASE определено в boost/test/auto_unit_test.hpp. Но если я его включу, то получу: undefined reference to init_unit_test_suite(int, char**)'` - person Ruggero Turra; 06.12.2010
comment
@wiso: undefined reference на самом деле совсем другая ошибка! Вы должны связать библиотеку boost.test - person icecrime; 06.12.2010
comment
Я уже использую -lboost_unit_test_framework, что мне нужно связать? - person Ruggero Turra; 06.12.2010

Какая версия Boost на вашей целевой платформе? Вы используете там старую версию?

Поскольку вы используете версию boost.test только с заголовком (вы включаете заголовок boost/test/included/unit_test.hpp, а не boost/test/unit_test.hpp), не можете ли вы просто скопировать рабочую установку boost со своего ПК? на целевую машину и указать компилятору использовать ее?

person hillel    schedule 06.12.2010