第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() マクロを使うべきです:
文字列が等しくない場合、両方の文字列の内容がテストログに追加され、比較に失敗した理由がすぐにわかるようになります。
スタンドアロン実行ファイルの準備
最後に、テストケースをスタンドアロン実行ファイルにするには、以下の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を使用している場合は、make
をnmake
に置き換えるなど、使用するビルドツールに置き換えてください。
実行ファイルの実行
出来上がった実行ファイルを実行すると、次のような出力が得られます:
********* 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.