このページでは

Qt Quick テスト

はじめに

Qt Quick Test は、QMLアプリケーション向けのユニットテストフレームワークです。テストケースは、TestCase 型内のJavaScript関数として記述されます:

import QtQuick 2.3
import QtTest 1.0

TestCase {
    name: "MathTests"

    function test_math() {
        compare(2 + 2, 4, "2 + 2 = 4")
    }

    function test_fail() {
        compare(2 + 2, 5, "2 + 2 = 5")
    }
}

test_ で始まる名前の関数は、実行されるテストケースとして扱われます。テストケースの記述に関する詳細については、TestCase およびSignalSpy 型のドキュメントを参照してください。

注: Qt Quick Test モジュールについては、バイナリ互換性は保証されません 。つまり、Qt Quick Test を使用するアプリケーションが正常に動作することが保証されるのは、そのアプリケーションが開発された際の Qt バージョンに限られます。ただし、ソースコードの互換性は保証されています。

モジュールの使用方法

QML API

Qt Quick TestのQML型は、QtTest のインポートを通じて利用可能です。これらの型を使用するには、.qmlファイルに次のインポート文を追加してください:

import QtTest

C++ API

C++ API を使用するには、モジュールライブラリに対して、直接または他の依存関係を通じてリンクを行う必要があります。CMakeやqmake を含むいくつかのビルドツールでは、これに対する専用のサポートが用意されています。

CMake を使用したビルド

find_package() コマンドを使用して、Qt6 パッケージ内の必要なモジュールコンポーネントを特定します:

find_package(Qt6 REQUIRED COMPONENTS QuickTest)
target_link_libraries(mytarget PRIVATE Qt6::QuickTest)

「CMake によるビルド」の概要も参照してください。

qmake を使用したビルド

対応するC++ライブラリをリンクするには2つの方法があります。テストプロジェクトでQMLTestCase を使用している場合、プロジェクトファイルにはすでに次の行が記述されているはずです:

CONFIG += qmltestcase

これにより、テストは C++QtQuickTest ライブラリにリンクされます。

C++ のみのテストプロジェクトの場合は、プロジェクトファイルに次の行を追加できます:

QT += qmltest

テストの実行

テストケースは、以下のコードで構成される C++ ハネスによって実行されます:

#include <QtQuickTest>
QUICK_TEST_MAIN(example)

ここで、「example」は、この一連のテストを一意に識別するために使用する識別子です。

CMakeLists.txt ファイルを設定し、お好みのジェネレータを使用してプロジェクトをビルドしてください。

cmake_minimum_required(VERSION 3.2)

project(tst_example LANGUAGES CXX)

enable_testing()

find_package(Qt6 REQUIRED COMPONENTS QuickTest Qml)

#[[The test harness scans the specified source directory recursively
for "tst_*.qml" files. By default, it looks in the current directory,
which is usually where the executable is. This command makes it look
in the project's source directory instead.]]
add_definitions(-DQUICK_TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")

qt_standard_project_setup(REQUIRES 6.6)

add_executable(tst_example tst_example.cpp)

add_test(NAME tst_example COMMAND tst_example)

target_link_libraries(tst_example
    PRIVATE
    Qt6::QuickTest
    Qt6::Qml
)

プロジェクトファイルに `CONFIG += qmltestcase ` を追加してください:

TEMPLATE = app
TARGET = tst_example
CONFIG += warn_on qmltestcase
SOURCES += tst_example.cpp

.pro ファイルで `IMPORTPATH ` が指定されている場合、「make check」を使用してテストを実行する際、IMPORTPATH に追加された各インポートパスがコマンドライン引数として渡されます:

IMPORTPATH += $$PWD/../imports/my_module1 $$PWD/../imports/my_module2

テストハネスは、指定されたソースディレクトリを再帰的にスキャンして「tst_*.qml」ファイルを検索します。QUICK_TEST_SOURCE_DIR が定義されていない場合、ハネスが実行される際に現在のディレクトリがスキャンされます。テストで使用される補助的なQMLコンポーネント用に、その他の*.qmlファイルが存在する場合があります。

-input コマンドラインオプションは、実行時に設定して、別のディレクトリからテストケースを実行することができます。これは、コンパイル時に指定されたディレクトリ名がホストを指すターゲットデバイス上でテストを実行する場合などに必要になることがあります。例:

tst_example -input /mnt/SDCard/qmltests

また、-input オプションを使用して単一のファイルを実行することも可能です。例:

tst_example -input data/test.qml
tst_example -input <full_path>/test.qml

注: qml テストファイルへのフルパスを指定する必要があるのは 、例えばシャドウビルドの場合などです。

テストケースで QML のインポートが必要な場合は、それらをテストプログラムのコマンドラインに `-import ` オプションとして追加できます。

-functions コマンドラインオプションを実行すると、現在のテスト関数のリストが返されます。テスト関数の名前を引数として指定することで、単一のテスト関数を実行することも可能です。例:

tst_example Test_Name::function1

-help コマンドラインオプションを実行すると、利用可能なすべてのオプションが表示されます。

tst_example -help

注: Qt Quick テストケースを実行すると 、テストコードにQuick UIが含まれていない場合でも、常に画面上にウィンドウが表示されます。これを回避するには、-platform offscreen を指定してテスト実行ファイルを実行してください。

QMLテストの前にC++を実行する

QML テストの実行前に C++ コードを実行するには、QUICK_TEST_MAIN_WITH_SETUP マクロを使用できます。これは、QML エンジンへのコンテキストプロパティの設定などに役立ちます。

このマクロはQUICK_TEST_MAIN と同一ですが、追加の型引数を取る点が異なります。テストフレームワークは、以下の名前を持つスロットおよび呼び出し可能な関数を呼び出します:

名前目的Since
void applicationAvailable()QApplication オブジェクトのインスタンス化直後に呼び出されます。QQmlEngine インスタンスを必要としないセットアップを行うには、この関数を使用してください。Qt 5.12
void qmlEngineAvailable(QQmlEngine *)QMLエンジンが利用可能になったときに呼び出されます。この時点までに、import paths 、plugin paths 、およびextra file selectors はすべて、エンジンに対して設定済みとなっています。

この関数は QML テストファイルごとに 1 回呼び出されるため、引数はそのテストに固有のものとなります。たとえば、これは各 QML テストファイルが独自の QML エンジンを持つことを意味します。

この関数は、QML型の登録や add import pathsの登録などに使用できます。

Qt 5.11
void cleanupTestCase()テストの実行が終了した直後に呼び出されます。すべてのオブジェクトが破棄され始める前に、この関数を使用してクリーンアップを行ってください。Qt 5.12

以下の例は、このマクロを使用して QML エンジンにコンテキストプロパティを設定する方法を示しています。

// src_qmltest_qquicktest.cpp
#include <QtQuickTest>
#include <QQmlEngine>
#include <QQmlContext>
#include <QGuiApplication>

class Setup : public QObject
{
    Q_OBJECT

public:
    Setup() {}

public slots:
    void applicationAvailable()
    {
        // Initialization that only requires the QGuiApplication object to be available
    }

    void qmlEngineAvailable(QQmlEngine *engine)
    {
        // Initialization requiring the QQmlEngine to be constructed
        engine->rootContext()->setContextProperty("myContextProperty", QVariant(true));
    }

    void cleanupTestCase()
    {
        // Implement custom resource cleanup
    }
};

QUICK_TEST_MAIN_WITH_SETUP(mytest, Setup)

#include "src_qmltest_qquicktest.moc"

.moc のインクルードは、.cpp ファイルのファイル名に基づいています。たとえば、上記の例では、.cpp ファイルはsrc_qmltest_qquicktest.cpp という名前になっています。もしファイル名がMyTest.cpp だった場合、インクルードは次のようになります:

#include "MyTest.moc"

参考

ライセンス

Qt Quick Qt Testは、The Qt Companyから商用ライセンスの下で提供されています。さらに、フリーソフトウェアライセンスの下でも利用可能です。Qt 5.4以降、これらのフリーソフトウェアライセンスは、GNU Lesser General Public Licenseバージョン3、 またはGNU General Public Licenseバージョン2です。詳細については、「Qtのライセンス」を参照してください。

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