1

Qtで学校のプロジェクトの単体テストを行う必要があります。Qtのチュートリアルを読んだのですが、そのようなテストをどのように作成すればよいかわかりません。私が言及したチュートリアルに示されているすべてのテストは、組み込みメソッドを参照しています。カスタムクラスの単体テストをどのように書くべきですか?これは私が持っている最も単純なクラスです:

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メソッドとコンストラクター用)を誰かが作成できるので、残りの部分を自分で続けることができます。前もって感謝します。

4

1 に答える 1

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リークがあると考えてください...しかし、あなたがあなたのクラスをどのようにしたいかはわかりません。もちろん、テストはここで合格します。

于 2012-12-12T21:09:34.307 に答える