このページの内容

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

Qt Test では、グラフィカルユーザーインターフェースをテストするためのいくつかの仕組みが紹介されています。Qt Test は、ネイティブなウィンドウシステムイベントをシミュレートする代わりに、内部的なQtイベントを送信します。つまり、テストが実行されているマシンに副作用が生じることはありません。

この章では、簡単な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 **

© 2026 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.