作成したGUIプログラムに対するボタン押下をテストする方法について



  • はじめまして。kumaと申します。
    現在、QTestを使って、作成したウィンドウ(ボタン、テキストあり)プログラムのユニットテストを検討中です。
    プログラムは、ボタンを押すとテキストボックスに文字列を表示するものです。

    テストケースでは以下のことを実施したいです。
     1. 作成したウィンドウクラスのインスタンスを生成する。
     2. showする。
     3. QTestにてマウス左ボタンを押下イベントをシミュレートする。
     4. テキストボタンに表示される文字列が期待値と一致することを比較する。

    GUI イベントのシミュレートのマニュアルを読んだのですが、ローカルでQLineEditを定義し、
    それに対して文字列を設定し、比較して、、、といったようなことが書かれていますが、
    どういったことをテストしたいのか理解することができませんでした。

    いったいこのようなことが可能なのでしょうか?
    勉強不足で申し訳ありませんが、何かアドバイスをいただきたいです。

    ちなみに環境は以下のとおりです。
    ・Qt5.2.0 LGPL
    ・OS:Windows 7

    よろしくお願いします。



  • 可能です。

    チュートリアルではキー入力が説明されていますが、 QTest::mouseClick() など、マウス系のシミュレート用関数もあるのでそちらを使用します。

    @
    TestWidget win;
    win.show();
    QTest::qWaitForWindowActive(&win);
    QPushButton *button = win.findChild<QPushButton *>();
    QLineEdit *lineedit = win.findChild<QLineEdit *>();
    QVERIFY(lineedit->text().isEmpty());
    QTest::mouseClick(button, Qt::LeftButton);
    QVERIFY(lineedit->text() == TestWidget::tr("Clicked"));
    @

    このサンプルでは対象となるWidgetにQPushButton, QLineEditが一つしか無いと仮定しているため、実際に使用するときにはsetObjectName()で名前を付けて限定したり、findChildren()を使用したりすることになると思います。



  • リプライありがとうございました。
    早速やってみました。
    アクティブなウインドウのButtonやLineEditを取得するんですね。
    こんな方法があったんですね。
    実現できて感動です。
    ありがとうございました!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.