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:
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
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
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 #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
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...
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 } }
Partager