0

基本的に定期的なアクションにQTimerを使用しているレガシーコードを単体テストしようとしています:

class MyClass : public QObject
{
    Q_OBJECT
public:
    explicit MyClass(QObject* parent = nullptr) : QObject(parent)
    {
        timer.setInterval(1000);
        timer.setSingleShot(false);
        timer.start();
        connect(&timer, &QTimer::timeout, this, &MyClass::onTimeout);
    }
    int getValue() const
    {
        return value;
    }
signals:

public slots:
    void onTimeout()
    {
        value++;
    }
private:
    int value{0};
    QTimer timer{this};
};

メソッド onTimeout() の単体テストを作成する必要があるため、 QTimer::timeout を MyClass::onTimeout から切断し、単体テストから更新をトリガーしようとしています。

void testFirstUpdate()
{
    MyClass myClass;
    qDebug() << "disconnect: " << myClass.disconnect(); //returns false
    myClass.dumpObjectInfo();
    QCOMPARE(myClass.getValue(), 0);
    myClass.onTimeout();
    QCOMPARE(myClass.getValue(), 1);
}

切断を機能させるにはどうすればよいですか? または、QtTestLib から QTimer を制御するより良い方法はありますか? MyClass::disconnectTimer() を追加することは唯一の実行可能なオプションですか?

4

1 に答える 1