0
단위 테스트를 시도하고 있지만 작동하지 않습니다.C++ QT5 LNK 2019 미확인 외부 기호 (단위 테스트)
2 개의 .pro 파일이 있습니다. 내 "메인"프로젝트에 하나, "Unittest"에 하나.
내 폴더 구조는 다음과 같습니다
offline_ip_adress_calculator
├───updater
│ └───updater
├───classes
│ ├───ip_calculator
│ └───threads
├───image
└───tests
└───Unittest
└───ip_calculator
유닛 테스트 .PRO 파일 :
TargetDirectory = C:\build\unit_test
CONFIG(debug, debug|release) {
DESTDIR = $$TargetDirectory\debug
OBJECTS_DIR = $$TargetDirectory\debug\.obj
MOC_DIR = $$TargetDirectory\debug\.moc
RCC_DIR = $$TargetDirectory\debug\.rcc
UI_DIR = $$TargetDirectory\debug\.ui
} else {
DESTDIR = $$TargetDirectory\release
OBJECTS_DIR = $$TargetDirectory\release\.obj
MOC_DIR = $$TargetDirectory\release\.moc
RCC_DIR = $$TargetDirectory\release\.rcc
UI_DIR = $$TargetDirectory\release\.ui
}
QT += testlib
QT += core
INSTALLS += target sources
CONFIG += c++11
TARGET = maintest
# Change this Path
INCLUDEPATH += X:/ip_adress_calculator/offline_ip_adress_calculator
TEMPLATE = app
SOURCES += \
qtestqstring.cpp \
ip_calculator/qttestcomboxone.cpp \
main.cpp
HEADERS += \
qtestqstring.h \
ip_calculator/qttestcomboxone.h
내 단위 테스트 클래스 :
#ifndef QTTESTCOMBOXONE_H
#define QTTESTCOMBOXONE_H
#include <QObject>
#include <QtTest/QTest>
#include "classes/ip_calculator/comboxone.h"
class QtTestComboxOne : public QObject
{
Q_OBJECT
private slots:
void QtTestCalculateIndustrialSwitchOne();
public:
explicit QtTestComboxOne(QObject *parent = 0);
signals:
public slots:
};
#endif // QTTESTCOMBOXONE_H
#include "qttestcomboxone.h"
QtTestComboxOne::QtTestComboxOne(QObject *parent) :
QObject(parent)
{
}
void QtTestComboxOne::QtTestCalculateIndustrialSwitchOne()
{
ComboxOne combox_one;
combox_one.setCommunicationNumber(1);
QCOMPARE(combox_one.calculate(QString("industrial_switch_1")), QString("10.0.20.2"));
}
ComboxOne 클래스 :
#ifndef COMBOXONE_H
#define COMBOXONE_H
#include "abstractipcalculator.h"
class ComboxOne : public AbstractIpCalculator
{
public:
ComboxOne();
QString calculate(QString);
private:
QString calculateOctetOne(QString);
QString calculateOctetTwo(QString);
QString calculateOctetThree(QString);
QString calculateOctetFour(QString);
};
#endif // COMBOXONE_H
COmboxOne의 CPP :
#include "comboxone.h"
ComboxOne::ComboxOne()
{
data_structure.enqueue(QPair<QString, QString>("industrial_switch_1", "Industrial Switch I"));
}
QString ComboxOne::calculate(QString name)
{
QString return_value;
return_value.append(calculateOctetOne(name));
return_value.append(".");
return_value.append(calculateOctetTwo(name));
return_value.append(".");
return_value.append(calculateOctetThree(name));
return_value.append(".");
return_value.append(calculateOctetFour(name));
return return_value;
}
QString ComboxOne::calculateOctetOne(QString name)
{
return [...];
}
QString ComboxOne::calculateOctetTwo(QString name)
{
[...]
return QString::number(temp_res);
}
QString ComboxOne::calculateOctetThree(QString name)
{
[...]
return QString::number(temp_res);
}
QString ComboxOne::calculateOctetFour(QString name)
{
[...]
return QString("10");
}
AbstractIpCalculator
#ifndef ABSTRACTIPCALCULATOR_H
#define ABSTRACTIPCALCULATOR_H
#include <QString>
#include <QDebug>
#include <QPair>
#include <QQueue>
class AbstractIpCalculator
{
public:
QQueue<QPair<QString,QString> > data_structure;
AbstractIpCalculator();
bool setParkNetzId(int index, int value);
void setCommunicationNumber(int communication_number);
virtual QString calculate(QString) = 0;
protected:
QMap<int, int> park_netz_list;
int communication_number;
int getParkNetId();
static const int bla_1 = 360;
static const int bal_2 = 363;
private:
virtual QString calculateOctetOne(QString) = 0;
virtual QString calculateOctetTwo(QString) = 0;
virtual QString calculateOctetThree(QString) = 0;
virtual QString calculateOctetFour(QString) = 0;
};
#endif // ABSTRACTIPCALCULATOR_H
단위 테스트 홈페이지
#include <QTest>
#include "qtestqstring.h"
#include "ip_calculator/qttestcomboxone.h"
int main()
{
QTestQString string_test;
QtTestComboxOne combox_one;
QTest::qExec(&string_test);
QTest::qExec(&combox_one);
}
내가 얻을이 오류 메시지 :
qttestcomboxone.obj:-1: Fehler:LNK2019: unresolved external symbol "public: virtual class QString __thiscall ComboxOne::calculate(class QString)" ([email protected]@@[email protected]@[email protected]@Z) referenced in function "private: void __thiscall QtTestComboxOne::QtTestCalculateIndustrialSwitchOne(void)" ([email protected]@@AAEXXZ)
qttestcomboxone.obj:-1: Fehler:LNK2019: unresolved external symbol "public: void __thiscall AbstractIpCalculator::setCommunicationNumber(int)" ([email protected]@@[email protected]) referenced in function "private: void __thiscall QtTestComboxOne::QtTestCalculateIndustrialSwitchOne(void)" ([email protected]@@AAEXXZ)
qttestcomboxone.obj:-1: Fehler:LNK2019: unresolved external symbol "public: bool __thiscall AbstractIpCalculator::setParkNetzId(int,int)" ([email protected]@@[email protected]) referenced in function "private: void __thiscall QtTestComboxOne::QtTestCalculateIndustrialSwitchOne(void)" ([email protected]@@AAEXXZ)
나는 생각한다 "ComboxOne"클래스는 부모 클래스를 찾을 수 없습니다.
실제로 코드를 작성한 적이 있습니까? 'AbstractIpCalculator'는 파생 클래스에서 구현되어야하는 메소드에 대해'= 0'이 누락 된 것처럼 들리지만,'calculate','setCommunicationNumber' 및'setParkNetzId'입니다. –
예, setCommunicationNumber와 setParkNetzId에 대한 코드는 wirtten입니다 AbstractIpCalculator에서. 계산은 가상 QString입니다. (QString) = 0; AbstractIpCalculator에 정의되어 있습니다. 이 클래스를 사용했지만 유닛 테스트에서 사용할 수 없으며 단서가 없습니다. – user2357505
함수가 정의 된 구현 파일을 잊어 버린 것 같습니다. –