第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
実行ファイルの実行
出来上がった実行ファイルを実行すると、以下のような出力が得られるはずだ:
本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。