IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[CxxTest] Undifined reference


Sujet :

C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut [CxxTest] Undifined reference
    Bonjour tout le monde!

    Je débute avec CxxTest. J'essaye de faire des tests unitaires pour la classe suivante:

    include/Bindon.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #ifndef BIDON_H_
    #define BIDON_H_
     
    namespace test
    {
     
      class Bidon
      {
      private:
        int m_value;
     
      public:
        Bidon(int value=0);
        virtual ~Bidon();
        int getValue() const;
        void setValue(int value);
      };
     
    } /* namespace test */
    #endif /* BIDON_H_ */
    src/Bindon.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include "../include/Bidon.h"
     
    namespace test
    {
     
      Bidon::Bidon(int value) :
          m_value(value)
      {
      }
     
     
      Bidon::~Bidon()
      {
      }
     
      int Bidon::getValue() const
      {
        return m_value;
      }
     
      void Bidon::setValue(int value)
      {
        m_value = value;
      }
     
    }
    Mon test unitaire:

    include/TestUnitBidon.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #ifndef TESTUNITBIDON_H_
    #define TESTUNITBIDON_H_
     
    #include <cxxtest/TestSuite.h>
     
    #include "Bidon.h"
     
    class TestUnitBidon : public CxxTest::TestSuite
    {
    public:
      void testGetValue()
      {
        test::Bidon bidon(10);
        TS_ASSERT_EQUALS(bidon.getValue(), 10);
      }
     
      void testSetValue()
      {
        test::Bidon bidon;
        TS_ASSERT_EQUALS(bidon.getValue(), 0);
        bidon.setValue(10);
        TS_ASSERT_EQUALS(bidon.getValue(), 0);
      }
     
    };
     
    #endif /*TESTUNITBIDON_H_*/
    J'essaye de le compiler avec CMake avec le fichier suivant:

    CMakeLists.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    cmake_minimum_required(VERSION 2.8)
     
    project(test_unit)
     
    FIND_PACKAGE(CxxTest REQUIRED)  
    # Use Python interpreter
    SET(CXXTEST_USE_PYTHON 1)  
     
    include_directories(${CMAKE_SOURCE_DIR}/include . ${CXXTEST_INCLUDE_DIR})
     
    file(GLOB_RECURSE src_files
        "${CMAKE_SOURCE_DIR}/src/*.cpp")
     
    file(GLOB_RECURSE test_files
        ${CMAKE_SOURCE_DIR}/include/TestUnitBidon.h)
     
     
    add_executable(testExe ${src_files})
     
    ENABLE_TESTING()  
    CXXTEST_ADD_TEST(unit-test test/unit/cxxtest/src/unit-test.cpp ${test_files})  
     
    add_executable(test-unit test/unit/cxxtest/src/unit-test.cpp src/Bidon.cpp)
    L'exécutable testExe compile et fonctionne parfaitement avec le main suivant:

    src/main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <cstdlib>
    #include "Bidon.h"
     
    int main(int argc, char **argv) {
      test::Bidon bidon;
     
      bidon.getValue();
      bidon.setValue(10);
     
      return EXIT_SUCCESS;
     
    }
    Malheureusement, quand je tente de compiler le test unitaire j'ai des problèmes au niveau de l'édition de liens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    ~/test_unit] make
    [ 14%] [ 28%] Scanning dependencies of target testExe
    Generating test/unit/cxxtest/src/unit-test.cpp
    Generating test/unit/cxxtest/src/unit-test.cpp
    [ 57%] [ 57%] Building CXX object CMakeFiles/testExe.dir/src/Bidon.cpp.o
    Building CXX object CMakeFiles/testExe.dir/src/main.cpp.o
    Linking CXX executable testExe
    [ 57%] Built target testExe
    Scanning dependencies of target unit-test
    Scanning dependencies of target test-unit
    [ 71%] [100%] [100%] Building CXX object CMakeFiles/test-unit.dir/src/Bidon.cpp.o
    Building CXX object CMakeFiles/test-unit.dir/test/unit/cxxtest/src/unit-test.cpp.o
    Building CXX object CMakeFiles/unit-test.dir/test/unit/cxxtest/src/unit-test.cpp.o
    Linking CXX executable unit-test
    Linking CXX executable test-unit
    Undefined symbols for architecture x86_64:
      "test::Bidon::Bidon(int)", referenced from:
          TestUnitBidon::testGetValue()       in unit-test.cpp.o
          TestUnitBidon::testSetValue()       in unit-test.cpp.o
      "test::Bidon::getValue() const", referenced from:
          TestUnitBidon::testGetValue()       in unit-test.cpp.o
          TestUnitBidon::testSetValue()       in unit-test.cpp.o
      "test::Bidon::~Bidon()", referenced from:
          TestUnitBidon::testGetValue()       in unit-test.cpp.o
          TestUnitBidon::testSetValue()       in unit-test.cpp.o
      "test::Bidon::setValue(int)", referenced from:
          TestUnitBidon::testSetValue()       in unit-test.cpp.o
    ld: symbol(s) not found for architecture x86_64
    collect2: ld returned 1 exit status
    make[2]: *** [unit-test] Error 1
    make[1]: *** [CMakeFiles/unit-test.dir/all] Error 2
    make[1]: *** Waiting for unfinished jobs....
    [100%] Built target test-unit
    make: *** [all] Error 2

    J'ai fait cette compilation sous Mac OS X Lion avec g++ (i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)) ainsi que sous Ubuntu 10.04 avec g++ (4.4.3) sans aucun changement.

    Je me doute que je ne compile pas correctement, mais je ne vois pas mon erreur.

    Si vous avez des idées...

    Merci d'avance!

    PS: Peut-on cacher les balises CODE pour que sauver un peu de place?

  2. #2
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Pourquoi as-tu deux exécutables, unit-test et test-unit ? Le second me semble en effet avoir une déclaration fausse dans le CMakeLists ; alors qu'ils compilent tous deux le même programme.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Merci pour ta réponse.

    Effectivement, j'ai rajouté un add_executable qui ne sert à rien.

    Je l'ai enlevé et tout fonctionne avec le CMakeLists.txt suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    cmake_minimum_required(VERSION 2.8)
     
    project(test_unit)
     
    FIND_PACKAGE(CxxTest REQUIRED)  
    # Use Python interpreter
    SET(CXXTEST_USE_PYTHON 1)  
     
    include_directories(${CMAKE_SOURCE_DIR}/include . ${CXXTEST_INCLUDE_DIR})
     
    file(GLOB_RECURSE src_files
        "${CMAKE_SOURCE_DIR}/src/*.cpp")
     
    file(GLOB_RECURSE test_files
        ${CMAKE_SOURCE_DIR}/test/TestUnitBidon.h)
     
     
    add_executable(testExe ${src_files})
     
    ENABLE_TESTING()  
    CXXTEST_ADD_TEST(unit-test test/unit/cxxtest/src/unit-test.cpp ${test_files} src/Bidon.cpp)
    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. winsock.h : undefined reference...
    Par abraxas dans le forum Dev-C++
    Réponses: 14
    Dernier message: 06/08/2012, 13h42
  2. linking error undifined reference
    Par monodev dans le forum SL & STL
    Réponses: 5
    Dernier message: 28/01/2009, 10h37
  3. linker error undifined reference to 'winmain@16'
    Par tmerigon dans le forum Dev-C++
    Réponses: 1
    Dernier message: 08/04/2007, 18h20
  4. Treeview : Erreur "Reference to variable or parameter..
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 4
    Dernier message: 06/05/2003, 11h19
  5. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo