Eigenes Projekt mit Cmake und Boost Testing linked nicht richtig!

Darian

Erfahrenes Mitglied
Hallo Leute,

um mir in Zukunft ein paar Probleme zu ersparen, möchte ich mal sauberes Unit-Testing betreiben. Außerdem bin ich auch viel im Linux unterwegs, und daher ist mir Plattformunabhängigkeit wichtig.

Dachte also Boost Testing + cmake könnte mir doch die Projekte in Zukunft vereinfachen.

Ich habe mir also mal ein kleines TestProjekt mit Tests und cmake erstellt, leider habe ich da schon link Probleme. Cmake alleine scheint aber zu funktionieren, und auch ein Testintprojekt ohne cmake kompiliert richtig. (die tests lassen sich dann über cmd aufrufen)

Als Anhang bekommt ihr das gesamte kleine Testprojekt, vielleicht kompiliert es ja bei jemanden out of the box. (würde mich da über Feedback freuen).

Hier nun eine genauere Erklärung:

CMakeLists.txt
Code:
add_executable(unitTests unitTests.cpp)
target_link_libraries(unitTests ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
enable_testing()

MESSAGE(" Link Tests with: ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}")

Tests habe ich absichtlich noch nicht hinzugefügt, es müsste doch auch alles theoretisch ohne dem enable_testing() kompilieren****** Aber selbst das bringt schon folgenden Link Fehler:

Code:
3>unitTests.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z)" in Funktion ""public: __thiscall boost::detail::shared_count::shared_count<struct boost::unit_test::ut_detail::callback0_impl_t<struct boost::unit_test::ut_detail::unused,void (__cdecl*)(void)> >(structboost::unit_test::ut_detail::callback0_impl_t<struct boost::unit_test::ut_detail::unused,void (__cdecl*)(void)> *)" (****$?0U?$callback0_impl_t@Uunused@ut_detail@unit_test@boost@@P6AXXZ@ut_detail@unit_test@boost@@@shared_count@detail@boost@@QAE@PAU?$callback0_impl_t@Uunused@ut_detail@unit_test@boost@@P6AXXZ@ut_detail@unit_test@2@@Z)".

Der Test-Code sieht wie folgt aus:
Code:
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
using boost::unit_test_framework::test_suite;


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

BOOST_AUTO_TEST_CASE( my_test )
{
    // 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
}

Ich dachte mir in den Ordner unitTests kommen alle Testfälle rein. Diese werden mit CMake zu einem eigenen Target gebuildet.

Allgemein freue ich mich über alles an Infos und Feedback mit dem ich irgendwie was anfangen kann. Würde nur ungerne auf CMake verzichten. Hoffe auch dass meine Erklärung deutlich genug aussagt wo meine Probleme liegen.

thx und lg
Darian
 

Anhänge

Mahhh du hast sowas von Recht, danke dir! Jetzt kann ich doch wieder cmake einbauen beginnen.

Dachte die werden getrost ignoriert, bin wie gesagt noch nicht so der Kenner in diesem Bereich.
Denke jetzt komme ich wieder weiter mit meiner Testumgebung.

Wenn sonst noch jemand Feedback oder Infos hätte, bin ich für alles offen.

thx und lg
Darian

P.S.: Gibt es besondere Infos oder Herangehensweisen wie man da Fehler findet?
 
Zuletzt bearbeitet:
Zurück