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
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:
Der Test-Code sieht wie folgt aus:
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
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