2012-12-12 5 views
0

Qt에서 학교 프로젝트를위한 단위 테스트를해야합니다. Qt 튜토리얼을 읽었지만, 어떻게 그런 테스트를 작성해야하는지 알 수 없습니다. 앞서 언급 한 튜토리얼에 표시된 모든 테스트는 내장 된 메서드를 참조합니다. 나는 사용자 정의 클래스에 대한 단위 테스트를 작성하는 방법을 내가 가진이 간단한 클래스라고 :QTestLib로 수업을 테스트하십시오.

task.h

#ifndef TASK_H 
#define TASK_H 

#include <QDateTime> 
#include <QTime> 

class Task 
{ 
private: 
    bool ifDone; 
    QString name; 
    QString description; 
    QDateTime *startTime; 
    QTime *start; 
    QDateTime *endTime; 
    QTime *end; 
    bool neededReminder; 
    QDateTime *reminderTime; 

public: 
    Task(QString _name, QString _description, QDate *dayClicked, 
     QTime *_startTime, QTime *_endTime, bool reminder); 

    QString toString(); 
}; 

#endif // TASK_H ` 

task.cpp

#include "task.h" 

Task::Task(QString _name, QString _description, QDate *dayClicked, 
    QTime *_startTime, QTime *_endTime, bool reminder) 
{ 
    ifDone = 0; 
    name = _name; 
    description = _description; 
    start = _startTime; 
    end = _endTime; 
    startTime = new QDateTime(*dayClicked, *start); 
    endTime = new QDateTime(*dayClicked, *end); 
    neededReminder = reminder; 
} 

QString Task::toString() { 
    QString task; 
    task.append(this->name); 
    task.append(" "); 
    task.append(this->start->toString("HH:mm")); 
    task.append(" - "); 
    task.append(this->end->toString("HH:mm")); 
    return task; 
} 

내가 #include를 위해 노력 하였다 이 클래스는 테스트 클래스뿐만 아니라 .h 및 .cpp 파일을 모두 프로젝트에 추가 했으므로 아무 것도 할 수 없었습니다. 누구든지 위의 클래스에 대한 몇 가지 샘플 테스트 메서드 (toString 메서드 및 생성자)를 작성할 수 있으므로 나머지 클래스와 함께 수행 할 수 있습니다. 미리 감사드립니다.

+0

필요한 모든 것은 여기에 있습니다. http://qt-project.org/doc/qt-4.8/qtestlib-tutorial.html – Mitch

+0

위에서 언급했듯이이 튜토리얼은 이미 읽었지만 참조 할 방법은 없습니다. 표준 라이브러리가 아닌 메소드에 관해서 설명합니다. 헤더 파일을 테스트 파일에 포함 시키려고하면 오류가 발생하여 클래스 파일을 프로젝트에 추가해도 아무런 결과가 없습니다. – jahsiotr

+0

첫 번째 코드 스 니펫은 헤더 파일을'# include '하는 방법을 보여줍니다. 'CONFIG' 변수를 추가 할 필요가있는 것을 알려주는'.pro' 파일이 첨부되어 있습니다. – Mitch

답변

1

성실히 말하자면이 질문은 끝나야하고 제공받은 책 중 일부를 읽기 시작해야한다고 생각합니다. 또한, 여기에 테스트 할 항목이 있는지, 아마도 문자열의 결과가 표시되지 않습니까? 이것은 당신을 도와줍니다 경우, 참조 :

UnitTests.pro을

QT  += testlib 
QT  -= gui 
TARGET = tst_unitteststest 
CONFIG += console 
CONFIG -= app_bundle 
TEMPLATE = app 
SOURCES += tst_unitteststest.cpp task.cpp 
DEFINES += SRCDIR=\\\"$$PWD/\\\" 
HEADERS += task.h 

#include <QString> 
#include <QtTest> 
#include "task.h" 

class UnitTestsTest : public QObject 
{ 
    Q_OBJECT 

public: 
    UnitTestsTest(); 

private Q_SLOTS: 
    void initTestCase(); 
    void cleanupTestCase(); 
    void testCase1(); 
}; 

UnitTestsTest::UnitTestsTest() 
{ 
} 

void UnitTestsTest::initTestCase() 
{ 
} 

void UnitTestsTest::cleanupTestCase() 
{ 
} 

void UnitTestsTest::testCase1() 
{ 
    QVERIFY2(true, "Failure"); 
    Task t("name", "desc", new QDate(1, 1, 2012), new QTime(0, 0), new QTime(1, 0), false); 
    QVERIFY(t.toString() == "name 00:00 - 01:00"); 
} 
QTEST_APPLESS_MAIN(UnitTestsTest) 
#include "tst_unitteststest.moc" 

이 들어 mem 누수가 여기에 있습니다 ...하지만 난 그 방법을 모르는 것을 고려 tst_unitteststest.cpp 당신의 계급이되기를 바랍니다. 시험은 물론 여기서 통과 할 것입니다.

+0

무엇이'QVERIFY2 (true, "Failure");'입니까? – cgmb

+0

Qt Creator 마법사에서 기본적으로 추가되었습니다. 그게 어떻게 작동하는지 이해할 수있을 거라 생각 했으니 까. –

+0

글쎄 거기에는 시험 할 것이 없다는 것을 알고 있지만 선생님은 정말로 듣고 싶지 않습니다. 그는 시험을하면서 내가 그들을하고 있다고 말했다. 어쨌든 도움을 주셔서 감사합니다. – jahsiotr