Intégration de GoogleTest et de GoogleMock
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:
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:
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:
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... :(