第3章 GUIイベントのシミュレーション

Qt Test はグラフィカル・ユーザー・インターフェースをテストするためのいくつかのメカニズムを備えています。ネイティブのウィンドウシステムのイベントをシミュレートする代わりに、 は Qt の内部イベントを送信します。つまり、テストが実行されているマシンに副作用がないことを意味します。Qt Test

この章では、簡単な GUI テストの書き方を示します。

GUIテストを書く

今回は、QLineEdit クラスの動作をテストしたいとします。前回と同じように、テスト関数を含むクラスが必要です:

#include <QtWidgets>
#include <QTest>

class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui();

};

唯一の違いは、QTest ネームスペースに加えて、Qt GUI クラス定義も含める必要があることです。

void TestGui::testGui()
{
    QLineEdit lineEdit;

    QTest::keyClicks(&lineEdit, "hello world");

    QCOMPARE(lineEdit.text(), QString("hello world"));
}

テスト関数の実装では、まずQLineEdit を作成します。次に、QTest::keyClicks() 関数を使って、"hello world" を行編集で書くシミュレーションを行います。

注意: キーボード・ショートカットを正しくテストするためには、ウィジェットも表示されなければなりません。

QTest::keyClicks()は、ウィジェット上で一連のキーをクリックすることをシミュレートします。オプションで、キーボード修飾子や、各キーをクリックした後のテストの遅延(ミリ秒)を指定することができます。同様に、QTest::keyClick ()、QTest::keyPress ()、QTest::keyRelease ()、QTest::mouseClick ()、QTest::mouseDClick ()、QTest::mouseMove ()、QTest::mousePress ()、QTest::mouseRelease ()関数を使用して、関連するGUIイベントをシミュレートできます。

最後に、QCOMPARE ()マクロを使用して、行編集のテキストが期待通りかどうかをチェックします。

スタンドアロン実行ファイルの準備

前回と同様に、テスト・ケースをスタンドアロン実行ファイルにするには、以下の2行が必要です:

QTEST_MAIN(TestGui)
#include "testgui.moc"

QTEST_MAIN() マクロは、すべてのテスト関数を実行する単純な main() メソッドに展開されます。テストクラスの宣言と実装の両方が .cpp ファイルにあるので、Qt のイントロスペクションを動作させるために、生成された moc ファイルもインクルードする必要があります。

実行ファイルのビルド

テストケースの実行ファイルは、CMake または qmake を使ってビルドすることができます。

CMakeでビルドする

CMakeLists.txt ファイルでビルド設定を行います:

# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

cmake_minimum_required(VERSION 3.16)
project(tutorial3 LANGUAGES CXX)

find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets)

qt_standard_project_setup()

qt_add_executable(tutorial3
    testgui.cpp
)

set_target_properties(tutorial3 PROPERTIES
    WIN32_EXECUTABLE TRUE
    MACOSX_BUNDLE TRUE
)

target_link_libraries(tutorial3 PRIVATE
    Qt6::Core
    Qt6::Gui
    Qt6::Test
    Qt6::Widgets
)

install(TARGETS tutorial3
    BUNDLE  DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

qt_generate_deploy_app_script(
    TARGET tutorial3
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})

次に、コマンドラインからcmake を実行するか、Qt-prefix/<version>/<platform>/bin/qt-cmake にあるqt-cmake 便利スクリプトを使用します:

<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja

次に、お好みのジェネレーター・ツールを実行して実行ファイルをビルドします。ここではNinjaを使っています:

ninja

qmakeでビルドする

.pro ファイルでビルド設定を行います:

QT += widgets testlib

SOURCES = testgui.cpp

# install
target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial3
INSTALLS += target

次にqmake を実行し、最後にmake を実行して実行ファイルをビルドします:

qmake
make

実行ファイルの実行

出来上がった実行ファイルを実行すると、以下のような出力が得られるはずだ:

********* Start testing of TestGui *********
Config: Using QtTest library %VERSION%, Qt %VERSION%
PASS   : TestGui::initTestCase()
PASS   : TestGui::testGui()
PASS   : TestGui::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 20ms
********* Finished testing of TestGui **

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.