第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 フレームワークを使った最初のユニットテストを書いて実行しました。
本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。