Bonjour

Je suis étudiant en école d'ingénieur, nouveau sur ce forum et actuellement en stage dans une entreprise de développement software pour appareils médicaux.

Mon rôle est la réalisation de tests et pour cela j'utilise les outils suivants:

- Windows 7
- C++
- l'IDE Qt Creator en version 3.4.1 avec MinGW

Pour simplifier les tests, j'ai décidé d'intégrer le framework Googletest et Googlemock. Cela me permet une écriture plus rapide des codes de test et de "mocker" les objets.

Cependant, après avoir suivi de nombreux tutoriels sur ce framework et de m'être renseigné sur son utilisation, j'ai un problème:

- La compilation du projet est impossible, j'ai les erreurs suivantes: undefined reference to `testing::FLAGS_gtest_throw_on_failure´ et undefined reference to `testing::InitGoogleMock(int*,char**)

main.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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "checksumtest.h"
#include "intercommunicationinterfacetest.h"
#include "intercommunicationprotocoltest.h"
#include "convertertest.h"
#include "IntelHexCodeTest.h"
#include "LogGoogleMock.h"
 
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
 
int main(int argc, char** argv)
{
    int status = 0;
 
    ::testing::GTEST_FLAG(throw_on_failure) = true;     // added 06/07
    ::testing::InitGoogleMock(&argc, argv);             //
 
 
    QStringList arguments = QStringList();
    arguments.append("");
    arguments.append("-xml");
    arguments.append("-o");
 
    {
        arguments.append("ChecksumTest.xml");
        ChecksumTest tc;
        status |= QTest::qExec(&tc, arguments);
        //status |= QTest::qExec(&tc, argc, argv);
        arguments.removeLast();
    }
    {
        arguments.append("InterCommunicationInterfaceTest.xml");
        InterCommunicationInterfaceTest tc;
        status |= QTest::qExec(&tc, arguments);
        //status |= QTest::qExec(&tc, argc, argv);
        arguments.removeLast();
    }
    {
        arguments.append("InterCommunicationProtocolTest.xml");
        InterCommunicationProtocolTest tc;
        status |= QTest::qExec(&tc, arguments);
        //status |= QTest::qExec(&tc, argc, argv);
        arguments.removeLast();
    }
    {
        arguments.append("ConverterTest.xml");
        ConverterTest tc;
        status |= QTest::qExec(&tc, arguments);
        //status |= QTest::qExec(&tc, argc, argv);
        arguments.removeLast();
    }
    {
        arguments.append("IntelHexCodeTest.xml");
        IntelHexCodeTest tc;
        status |= QTest::qExec(&tc, arguments);
        //status |= QTest::qExec(&tc, argc, argv);
        arguments.removeLast();
    }
 
    return status;
}
 
#pragma GCC diagnostic pop
LogGoogleMock.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 MOCKINTERCOMMUNICATIONPROTOCOL_H
#define MOCKINTERCOMMUNICATIONPROTOCOL_H
 
#include "ALog.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
 
using namespace Hal;
 
class LogGoogleMock : public ALog //, public InterCommunicationProtocol
{
 
public:
    LogGoogleMock() { ALog::SingletonPointer = this; }
 
 
    MOCK_METHOD1(LogError, void(unsigned int errorID));
};
 
#endif // MOCKINTERCOMMUNICATIONPROTOCOL_H
Je pense que ce sont des erreurs de dépendance malgré le fait que j'ai bien intégré les librairies gtestd.lib et gmock.lib ainsi que les chemins des dossiers include dans le fichier .pro :

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
#-------------------------------------------------
#
# Project created by QtCreator 2015-01-29T11:01:13
#
#-------------------------------------------------
 
QT       += testlib
 
QT       -= gui
 
TARGET = main
CONFIG   += console
CONFIG   -= app_bundle
 
 
TEMPLATE = app
 
Release:DESTINATION_PATH = "$$PWD/../../build/ProtocollsTest/release"
Debug:DESTINATION_PATH = "$$PWD/../../build/ProtocollsTest/debug"
 
DESTDIR = $${DESTINATION_PATH}
OBJECTS_DIR = $${DESTINATION_PATH}/.obj
MOC_DIR = $${DESTINATION_PATH}/.moc
RCC_DIR = $${DESTINATION_PATH}/.rcc
UI_DIR = $${DESTINATION_PATH}/.ui
 
SOURCES += \
    main.cpp \
    checksumtest.cpp \
    intercommunicationinterfacetest.cpp \
    intercommunicationprotocoltest.cpp \
    convertertest.cpp \
    IntelHexCodeTest.cpp \
    LogMock.cpp
 
HEADERS += \
    checksumtest.h \
    intercommunicationinterfacetest.h \
    intercommunicationprotocoltest.h \
    convertertest.h \
    IntelHexCodeTest.h \
    LogMock.h \
    LogGoogleMock.h
 
 
Release: PROT_PATH = "$$PWD/../../build/Protocolls/release"
Debug: PROT_PATH = "$$PWD/../../build/Protocolls/debug"
 
LIBS += -L$$PROT_PATH/ -lProtocolls
 
INCLUDEPATH += $$PWD/../Protocolls
DEPENDPATH += $$PWD/../Protocolls
 
PRE_TARGETDEPS += $$PROT_PATH/libProtocolls.a
 
Release: HAL_PATH = "$$PWD/../../build/HAL/release"
Debug: HAL_PATH = "$$PWD/../../build/HAL/debug"
 
LIBS += -L$$HAL_PATH/ -lHAL
 
INCLUDEPATH += $$PWD/../HAL
DEPENDPATH += $$PWD/../HAL
 
PRE_TARGETDEPS += $$HAL_PATH/libHAL.a
 
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../googletest-master/googlemock/msvc/2010/release/ -lgmock
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../googletest-master/googlemock/msvc/2010/Debug/ -lgmock
 
INCLUDEPATH += $$PWD/../../../../../googletest-master/googlemock/include
DEPENDPATH += $$PWD/../../../../../googletest-master/googlemock/include
 
PRE_TARGETDEPS += $$PWD/../../../../../googletest-master/googlemock/msvc/2010/Debug/gmock.lib
 
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../googletest-master/googletest/msvc/gtest/release/ -lgtestd
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../googletest-master/googletest/msvc/gtest/Debug/ -lgtestd
 
INCLUDEPATH += $$PWD/../../../../../googletest-master/googletest/include
DEPENDPATH += $$PWD/../../../../../googletest-master/googletest/include
 
PRE_TARGETDEPS += $$PWD/../../../../../googletest-master/googletest/msvc/gtest/Debug/gtestd.lib
 
contains(CONFIG, CodeCoverage) {
				CodeCoverage {
								PRECOMPILED_HEADERS=
								QMAKE_LINK_OBJECT_MAX=10000
								COVERAGE_OPTIONS =  --cs-count --cs-full-instrumentation --cs-warnings=display
								COVERAGE_OPTIONS += --cs-output=main.exe
								COVERAGE_OPTIONS += --cs-exclude-file-regex=qrc_.*
								COVERAGE_OPTIONS += --cs-verbose=build
 
								QMAKE_CFLAGS   += $$COVERAGE_OPTIONS
								QMAKE_CXXFLAGS += $$COVERAGE_OPTIONS
								QMAKE_LFLAGS   += $$COVERAGE_OPTIONS
 
								QMAKE_CC=cs$$QMAKE_CC
								QMAKE_CXX=cs$$QMAKE_CXX
								QMAKE_LINK=cs$$QMAKE_LINK
								QMAKE_LINK_SHLIB=cs$$QMAKE_LINK_SHLIB
								QMAKE_AR=cs$$QMAKE_AR
								QMAKE_LIB=cs$$QMAKE_LIB
				}
}
S'il vous plaît, pouvez vous m'aider à résoudre ce problème? Cela fait près d'une semaine que je suis bloqué dessus...