Cpp Unit Test Fehler



  • Hallo zusammen,

    ich versuche gerade CPP-Unit Tests zum laufen zu bekommen. Allerdings erhalte ich Fehler, welche ich nicht verstehe. Vielleicht habt ihr ja einen Tip für mich.

    #ifndef PEERUNITTEST_H
    #define	PEERUNITTEST_H
    
    #include <cppunit/extensions/HelperMacros.h>
    
    namespace A {
        namespace B {
    
            class PeerUnitTest : public CPPUNIT_NS::TestFixture {
    
                CPPUNIT_TEST_SUITE(PeerUnitTest);
                CPPUNIT_TEST(testPeer);
                CPPUNIT_TEST_SUITE_END();
    
            public:
                PeerUnitTest();
                virtual ~PeerUnitTest();
                void setUp();
                void tearDown();
    
            private:
    
                void testPeer();
            };
        }
    }
    #endif	/* PEERUNITTEST_H */
    
    #include "PeerUnitTest.h"
    
    #include "../Exception.h"
    #include "../Peer.h"
    #include "../Group.h"
    #include "../common/GroupReferrer.h"
    #include "../common/Cluster.h"
    #include "../common/ClusterReferrer.h"
    
    namespace A {
        namespace B {
    
            CPPUNIT_TEST_SUITE_REGISTRATION(PeerUnitTest);
    
            PeerUnitTest::PeerUnitTest() {
            }
    
            PeerUnitTest::~PeerUnitTest() {
            }
    
            void PeerUnitTest::setUp() {
            }
    
            void PeerUnitTest::tearDown() {
            }
    
            void PeerUnitTest::testPeer() {
    
                Peer a;
                CPPUNIT_ASSERT(a.getPeerID() == -1);
                CPPUNIT_ASSERT(a.getRole() == Peer::SLAVE);
                CPPUNIT_ASSERT(a.getLocalAddress() == -1);
                CPPUNIT_ASSERT(a.getState() == Peer::JOINED);
                CPPUNIT_ASSERT_THROW(a.getMasterAddress(), AttributeNotSetException );
    
            }//End testPeer
      }
    }
    

    Allerdings erhalte ich vom CppUnitTestCompiler folgende Fehler:

    build/Debug/GNU-Linux-x86/tests/tests/PeerUnitTest.o: In function `__tcf_0':
    PeerUnitTest.h:19: undefined reference to `CppUnit::TestNamer::~TestNamer()'
    PeerUnitTest.o: In function `A::B::PeerUnitTest::testPeer()':
    PeerUnitTest.cc:40: undefined reference to `CppUnit::SourceLine::SourceLine(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
    PeerUnitTest.cc:40: undefined reference to `CppUnit::Message::Message(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    PeerUnitTest.cc:40: undefined reference to `CppUnit::Asserter::failIf(bool, CppUnit::Message const&, CppUnit::SourceLine const&)'
    PeerUnitTest.cc:40: undefined reference to `CppUnit::SourceLine::~SourceLine()'
    PeerUnitTest.cc:40: undefined reference to `CppUnit::SourceLine::~SourceLine()'
    PeerUnitTest.cc:41: undefined reference to `CppUnit::SourceLine::SourceLine(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
    PeerUnitTest.cc:41: undefined reference to `CppUnit::Message::Message(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    PeerUnitTest.cc:41: undefined reference to `CppUnit::Asserter::failIf(bool, CppUnit::Message const&, CppUnit::SourceLine const&)'
    PeerUnitTest.cc:41: undefined reference to `CppUnit::SourceLine::~SourceLine()'
    PeerUnitTest.cc:41: undefined reference to `CppUnit::SourceLine::~SourceLine()'
    
    .....
    

    Kann mir jemand sagen wieso dies passiert? Der Testrunner wurde automatisch durch meine IDE erzeugt.

    Gruß, uwe



  • Du hast die CppUnit-Bibliothek nicht dazugelinkt.

    Wie du das machst, steht mit ziemlicher Sicherheit in der Dokumentation deiner IDE (meine Kristallkugel ist leider gerade in Reparatur ;)).



  • Hey,

    erst einmal danke für die schnelle Antwort. So ganz kann es aber nicht stimmen, aus folgenden Gründen:

    a) laut Doku zu meiner IDE (Netbeans) reicht es den Include Path anzupassen, der Rest soll magisch gehen (habe auch nirgends was gelesen von add library)
    b) die Tests gingen schon mal, ich habe was verändert an den zu testenden Klassen und sie gehen nicht mehr

    Ich bin verwirrt.

    Gruß, uwe



  • Naja, was du da hast, sind Linkerfehler. Der Linker beschwert sich, dass er einen Haufen Symbole aus dem Namensraum CppUnit nicht finden kann - das bedeutet mit ziemlicher Sicherheit, dass die Bibliothek nicht mitgelinkt wird.

    Denkbar wäre noch, dass der ganze CppUnit-Code inline definiert ist und du einen notwendigen Header nicht eingebunden hast, aber das käme mir doch recht merkwürdig vor.



  • Hey,

    ne dies sind sie nicht, hab nachgeschaut :). Nun, ich habe das Makefile (automatisch erzeugt) bereinigt, alles rausgeschmissen und einen leeren Testcase angelegt, und siehe es geht! ???

    Komische Sache. Hat halt auch ein paar Nachteile, wenn alles die IDE macht.


Anmelden zum Antworten