第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
実行ファイルの実行
出来上がった実行ファイルを実行すると、以下のような出力が得られるはずだ:
© 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.