2012-12-12 60 views
0

我需要在Qt中爲我的學校項目做一些單元測試,儘管我已經閱讀了Qt教程,但我無法弄清楚我該如何編寫這樣的測試。我提到的教程中顯示的所有測試都涉及內置方法。我應該如何編寫自定義類單元測試說這是最簡單的I類有:用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; 
} 

我嘗試#包括這個類測試類,以及添加.h和.cpp文件的項目,我沒有設法做任何事情。任何人都可以爲上面的類寫一些樣本測試方法(對於toString方法和構造函數),這樣我就可以繼續進行其他工作。提前致謝。

+0

一切都在這裏:http://qt-project.org/doc/qt-4.8/qtestlib-tutorial.html – Mitch

+0

正如我上面說我已閱讀本教程,但我不知道如何引用它涉及到非標準庫的方法。試圖將頭文件包含到測試文件中會給我一個錯誤,只會將類文件添加到項目結果中。 – jahsiotr

+0

第一個代碼片段告訴你如何「包含」頭文件,如果這就是你的意思?還有一個附加的'.pro'文件,告訴你需要用'CONFIG'變量添加什麼。 – 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 

tst_unitteststest.cpp

#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泄漏這裏...但我不知道你怎麼樣希望你的班級成爲。當然,測試會通過這裏。你需要

+0

QVERIFY2(true,「Failure」);'? – cgmb

+0

這是Qt Creator嚮導默認添加的。我認爲它可以幫助理解這是如何工作的,所以我把它留在那裏。 –

+0

那麼我知道那裏沒有什麼可以測試的,但我的老師並不真的想聽那個。他說做測試,所以我正在做。無論如何感謝您的幫助。 – jahsiotr

相關問題