第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 フレームワークを使った最初のユニットテストを書いて実行しました。

本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。