2010-12-06 6 views
1

Ich versuche, boost.test auf einem Remote-System mit Boost 1.33.1 zu verwenden. Auf meinem PC dieses kleine Beispiel aus http://www.boost.org/doc/libs/1_42_0/libs/test/doc/html/tutorials/hello-the-testing-world.html funktioniert:Problem mit boost.test mit alter Version

#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 
} 

aber auf dem Remote-System unit_test.hpp die Datei nicht existiert. Auf meinem PC unit_test_framework.hpp die Datei ist einfach:

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

und es ist auf dem Hauptsystem. Also habe ich versucht, die gehören zu ändern:

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

aber der Compiler sagt:

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

was ist das? Wie man es löst?

+0

Auf welchem ​​System haben Sie das geändert? einschließen? –

+0

Könnten Sie uns bitte mitteilen, welche Boost-Version auf Ihrem Remote-System installiert ist? – jopasserat

+0

remote: 1.33.1, lokal: 1.36.0 –

Antwort

3

On-Boost 1,33 Verwendung:

#include <boost/test/auto_unit_test.hpp> 

anstelle von:

#include <boost/test/unit_test.hpp> 

und auch vor der # include add:

#define BOOST_AUTO_TEST_MAIN 

oder Sie werden einen Linker-Fehler erhalten

0

Wenn Ihre Boost-Version älter als 1,33 ist, sollten Sie versuchen, BOOST_AUTO_TEST_CASE in BOOST_AUTO_UNIT_TEST umzubenennen, und es sollte die Kompilierung bei neueren Boost-Versionen nicht unterbrechen.

Sehen Sie diese Boost.Test 1.33 Release Notes:

BOOST_AUTO_UNIT_TEST zu BOOST_AUTO_TEST_CASE umbenannt. Alter Name immer noch bereitgestellt, aber nicht mehr empfohlen

+0

Ich habe genau die gleiche Nachricht. Ich denke, dass 'BOOST_AUTO_TEST_CASE' in' boost/test/auto_unit_test.hpp' definiert ist. Aber wenn ich es einschließe, bekam ich: 'undefinierter Verweis auf' init_unit_test_suite (int, char **) '' –

+0

@wiso:' undefined reference' ist eigentlich ein ganz anderer Fehler! Du musst mit der boost.test-Bibliothek verlinken – icecrime

+1

Ich benutze bereits '-lboost_unit_test_framework', was muss ich verlinken? –

0

Was ist die Boost-Version auf Ihrer Zielplattform? Benutzt du eine alte Version?

Da Sie eine Header-Only-Version von boost.test verwenden (Sie enthalten die Header boost/test/included/unit_test.hpp und nicht boost/test/unit_test.hpp), können Sie nicht einfach den Arbeitsboost kopieren Installation von Ihrem PC auf die Zielmaschine und weisen Sie Ihren Compiler an, sie zu benutzen?