第1章: ユニットテストの書き方

この第1章では、簡単な単体テストの書き方と、テストケースをスタンドアロンの実行ファイルとして実行する方法を示します。

テストの書き方

QString クラスの振る舞いをテストしたいとしましょう。まず、テスト関数を含むクラスが必要です。このクラスはQObject を継承する必要があります:

#include <QTest>

class TestQString: public QObject
{
    Q_OBJECT
private slots:
    void toUpper();
};

注: QTest ヘッダーをインクルードし、テスト関数をプライベート・スロットとして宣言する必要があります。

それから、テスト関数そのものを実装する必要があります。実装は次のようになります:

void TestQString::toUpper()
{
    QString str = "Hello";
    QVERIFY(str.toUpper() == "HELLO");
}

QVERIFY() マクロは、引数として渡された式を評価する。その式が真と評価されれば、テスト関数の実行は続行されます。そうでない場合は、失敗を示すメッセージがテストログに追加され、テスト関数の実行が停止します。

しかし、テストログへの出力をもっと冗長にしたい場合は、代わりにQCOMPARE() マクロを使うべきです:

void TestQString::toUpper()
{
    QString str = "Hello";
    QCOMPARE(str.toUpper(), QString("HELLO"));
}

文字列が等しくない場合、両方の文字列の内容がテストログに追加され、比較に失敗した理由がすぐにわかるようになります。

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

最後に、テストケースをスタンドアロン実行ファイルにするには、以下の2行が必要である:

QTEST_MAIN(TestQString)
#include "testqstring.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(tutorial1 LANGUAGES CXX)

find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets)

qt_standard_project_setup()

qt_add_executable(tutorial1
    testqstring.cpp
)

set_target_properties(tutorial1 PROPERTIES
    WIN32_EXECUTABLE TRUE
    MACOSX_BUNDLE TRUE
)

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

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

qt_generate_deploy_app_script(
    TARGET tutorial1
    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 = testqstring.cpp

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

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

qmake
make

注: windowsを使用している場合は、makenmake に置き換えるなど、使用するビルドツールに置き換えてください。

実行ファイルの実行

出来上がった実行ファイルを実行すると、次のような出力が得られます:

********* Start testing of TestQString *********
Config: Using QtTest library %VERSION%, Qt %VERSION%
PASS   : TestQString::initTestCase()
PASS   : TestQString::toUpper()
PASS   : TestQString::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped
********* Finished testing of TestQString *********

おめでとうございます!おめでとうございます!あなたはQt Test フレームワークを使って最初のユニットテストを書き、実行しました。

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