このページでは

QTest Namespace

QTest 名前空間には、Qt Test に関連するすべての関数と宣言が含まれています。詳細...

ヘッダー: #include <QTest>
CMake: find_package(Qt6 REQUIRED COMPONENTS Test)
target_link_libraries(mytarget PRIVATE Qt6::Test)
qmake: QT += testlib

クラス

class QTouchEventSequence
class QTouchEventWidgetSequence
(since 6.8) class ThrowOnFailDisabler
(since 6.8) class ThrowOnFailEnabler
(since 6.8) class ThrowOnSkipDisabler
(since 6.8) class ThrowOnSkipEnabler

型

enum KeyAction { Press, Release, Click, Shortcut }
enum MouseAction { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove }
enum QBenchmarkMetric { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, WalltimeNanoseconds, …, EmulationFaults }
enum TestFailMode { Abort, Continue }

変数

(since 6.11) std::atomic<std::chrono::milliseconds> defaultTryTimeout

関数

void addColumn(const char *name, T *dummy = 0)
QTestData &addRow(const char *format, ...)
const char *benchmarkMetricName(QTest::QBenchmarkMetric metric)
const char *benchmarkMetricUnit(QTest::QBenchmarkMetric metric)
QPointingDevice *createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen, QInputDevice::Capabilities caps = QInputDevice::Capability::Position)
const char *currentAppName()
const char *currentDataTag()
(since 6.11) const char *currentGlobalDataTag()
bool currentTestFailed()
const char *currentTestFunction()
(since 6.5) bool currentTestResolved()
(since 6.3) void failOnWarning(const QRegularExpression &messagePattern)
(since 6.8) void failOnWarning()
(since 6.3) void failOnWarning(const char *message)
void ignoreMessage(QtMsgType type, const char *message)
void ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)
void keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keySequence(QWidget *widget, const QKeySequence &keySequence)
void keySequence(QWindow *window, const QKeySequence &keySequence)
void mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1)
void mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1)
void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
QTestData &newRow(const char *dataTag)
int qExec(QObject *testObject, int argc = 0, char **argv = nullptr)
int qExec(QObject *testObject, const QStringList &arguments)
QSharedPointer<QTemporaryDir> qExtractTestData(const QString &dirName)
(since 6.5) void qRegisterTestCase(const QString &name, QTest::TestEntryFunction entryFunction)
(since 6.7) void qSleep(std::chrono::milliseconds msecs)
void qSleep(int ms)
(since 6.7) void qWait(std::chrono::milliseconds msecs)
void qWait(int msecs)
(since 6.7) bool qWaitFor(Functor predicate, QDeadlineTimer deadline = QDeadlineTimer( defaultTryTimeout.load(std::memory_order_relaxed)))
bool qWaitFor(Functor predicate, int timeout)
(since 6.10) bool qWaitForWindowActive(QWidget *widget, QDeadlineTimer timeout)
(since 6.10) bool qWaitForWindowActive(QWindow *window, QDeadlineTimer timeout)
(since 6.10) bool qWaitForWindowActive(QWidget *widget)
(since 6.10) bool qWaitForWindowActive(QWindow *window)
bool qWaitForWindowActive(QWidget *widget, int timeout)
bool qWaitForWindowActive(QWindow *window, int timeout)
(since 6.10) bool qWaitForWindowExposed(QWidget *widget, QDeadlineTimer timeout)
(since 6.10) bool qWaitForWindowExposed(QWindow *window, QDeadlineTimer timeout)
(since 6.10) bool qWaitForWindowExposed(QWidget *widget)
(since 6.10) bool qWaitForWindowExposed(QWindow *window)
bool qWaitForWindowExposed(QWidget *widget, int timeout)
bool qWaitForWindowExposed(QWindow *window, int timeout)
(since 6.7) bool qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout)
(since 6.7) bool qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout)
(since 6.10) bool qWaitForWindowFocused(QWidget *widget)
(since 6.10) bool qWaitForWindowFocused(QWindow *window)
void setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric)
(since 6.8) void setThrowOnFail(bool enable)
(since 6.8) void setThrowOnSkip(bool enable)
char *toHexRepresentation(const char *ba, qsizetype length)
char *toString(const T &value)
char *toString(QSizePolicy sp)
char *toString(QSizePolicy::ControlType ct)
char *toString(QSizePolicy::ControlTypes cts)
char *toString(QSizePolicy::Policy p)
char *toString(const QByteArray &ba)
char *toString(const QCborError &c)
char *toString(const QChar &character)
char *toString(const QDate &date)
char *toString(const QDateTime &dateTime)
(since 6.5) char *toString(const QKeySequence &ks)
char *toString(const QLatin1StringView &string)
char *toString(const QPoint &point)
char *toString(const QPointF &point)
char *toString(const QRect &rectangle)
char *toString(const QRectF &rectangle)
char *toString(const QSize &size)
char *toString(const QSizeF &size)
char *toString(const QString &string)
char *toString(const QStringView &string)
char *toString(const QTime &time)
char *toString(const QUrl &url)
char *toString(const QUuid &uuid)
char *toString(const QVariant &variant)
char *toString(const QVector2D &v)
char *toString(const QVector3D &v)
char *toString(const QVector4D &v)
char *toString(const std::pair<T1, T2> &pair)
char *toString(const std::tuple<Types...> &tuple)
char *toString(std::nullptr_t)
QTest::QTouchEventWidgetSequence touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)
QTest::QTouchEventSequence touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)
(since 6.8) void wheelEvent(QWindow *window, QPointF pos, QPoint angleDelta, QPoint pixelDelta = QPoint(0, 0), Qt::KeyboardModifiers stateKey = Qt::NoModifier, Qt::ScrollPhase phase = Qt::NoScrollPhase)

マクロ

QBENCHMARK
QBENCHMARK_ONCE
QCOMPARE(実値、期待値)
(since 6.9) QCOMPARE_3WAY(左辺,右辺,次数)
(since 6.4) QCOMPARE_EQ(計算値,基準値)
(since 6.4) QCOMPARE_GE(計算値,ベースライン)
(since 6.4) QCOMPARE_GT(計算値,ベースライン)
(since 6.4) QCOMPARE_LE(計算値,基準値)
(since 6.4) QCOMPARE_LT(計算値,基準値)
(since 6.4) QCOMPARE_NE(計算済み、ベースライン)
QEXPECT_FAIL(データインデックス,コメント,モード)
QFAIL(メッセージ)
QFETCH(タイプ,名前)
QFETCH_GLOBAL(タイプ,名前)
QFINDTESTDATA(ファイル名)
QSKIP(description)
QTEST(実データ,テスト要素)
QTEST_APPLESS_MAIN(TestClass)
QTEST_GUILESS_MAIN(TestClass)
QTEST_MAIN(TestClass)
(since 6.8) QTEST_THROW_ON_FAIL
(since 6.8) QTEST_THROW_ON_SKIP
QTRY_COMPARE(実測値,期待値)
(since 6.4) QTRY_COMPARE_EQ(計算値,基準値)
(since 6.4) QTRY_COMPARE_EQ_WITH_TIMEOUT(計算値、基準値、タイムアウト)
(since 6.4) QTRY_COMPARE_GE(計算値、基準値)
(since 6.4) QTRY_COMPARE_GE_WITH_TIMEOUT(計算値,基準値,タイムアウト)
(since 6.4) QTRY_COMPARE_GT(算出値、ベースライン)
(since 6.4) QTRY_COMPARE_GT_WITH_TIMEOUT(計算値、ベースライン、タイムアウト)
(since 6.4) QTRY_COMPARE_LE(計算値、ベースライン)
(since 6.4) QTRY_COMPARE_LE_WITH_TIMEOUT(計算済み、ベースライン、タイムアウト)
(since 6.4) QTRY_COMPARE_LT(計算値、ベースライン)
(since 6.4) QTRY_COMPARE_LT_WITH_TIMEOUT(計算済み,ベースライン,タイムアウト)
(since 6.4) QTRY_COMPARE_NE(計算済み,ベースライン)
(since 6.4) QTRY_COMPARE_NE_WITH_TIMEOUT(計算値,ベースライン,タイムアウト)
QTRY_COMPARE_WITH_TIMEOUT(実値,期待値,タイムアウト)
QTRY_VERIFY2(条件,メッセージ)
QTRY_VERIFY(条件)
QTRY_VERIFY2_WITH_TIMEOUT(条件、メッセージ、タイムアウト)
QTRY_VERIFY_WITH_TIMEOUT(条件、タイムアウト)
QVERIFY2(条件,メッセージ)
QVERIFY(条件)
(since 6.3) QVERIFY_THROWS_EXCEPTION(例外タイプ, ...)
(since 6.3) QVERIFY_THROWS_NO_EXCEPTION(...)

詳細な説明

ユニットテストの記述方法については、『Qt Test の概要』を参照してください。

クラス

classQTouchEventSequence

QTouchEventSequence クラスは、一連のタッチイベントをシミュレートするために使用されます。詳細...

classQTouchEventWidgetSequence

QTouchEventWidgetSequence クラスは、ウィジェットのタッチイベントのシーケンスをシミュレートするために使用されます。詳細...

クラスThrowOnFailDisabler

クラスThrowOnFailEnabler

classThrowOnSkipDisabler

クラスThrowOnSkipEnabler

型のドキュメント

enum QTest::KeyAction

この列挙型は、キーの処理において可能なアクションを定義しています。

定数値説明
QTest::Press0キーが押されています。
QTest::Release1キーが離されました。
QTest::Click2キーがクリックされた(押されてから離された)。
QTest::Shortcut3ショートカットが実行されます。この値は Qt 5.6 で追加されました。

enum QTest::MouseAction

この列挙型は、マウス処理において可能なアクションを定義しています。

定数値説明
QTest::MousePress0マウスボタンが押されます。
QTest::MouseRelease1マウスボタンが離されます。
QTest::MouseClick2マウスボタンがクリックされる(押されてから離される)。
QTest::MouseDClick3マウスボタンがダブルクリックされた(2回押して離された)。
QTest::MouseMove4マウスポインタが移動した。

enum QTest::QBenchmarkMetric

この列挙型には、ベンチマークの対象となり得るすべての項目が列挙されています。

定数値説明
QTest::FramesPerSecond01 秒あたりのフレーム数
QTest::BitsPerSecond11 秒あたりのビット数
QTest::BytesPerSecond21秒あたりのバイト数
QTest::WalltimeMilliseconds3クロック時間(ミリ秒単位)
QTest::WalltimeNanoseconds7クロック時間(ナノ秒)
QTest::BytesAllocated8バイト単位のメモリ使用量
QTest::Events6イベント数
QTest::CPUTicks4CPU時間
QTest::CPUMigrations9CPU間のプロセス移行
QTest::CPUCycles10CPUサイクル
QTest::RefCPUCycles30参照 CPU サイクル
QTest::BusCycles11バスサイクル
QTest::StalledCycles12ストールしたサイクル
QTest::InstructionReads5命令の読み出し
QTest::Instructions13実行された命令
QTest::BranchInstructions14分岐型命令
QTest::BranchMisses15予測が外れた分岐命令
QTest::CacheReferences16あらゆる種類のキャッシュアクセス
QTest::CacheMisses20あらゆる種類のキャッシュミス
QTest::CacheReads17キャッシュの読み取り/ロード
QTest::CacheReadMisses21キャッシュの読み出し/ロードのミス
QTest::CacheWrites18キャッシュ書き込み/ストア
QTest::CacheWriteMisses22キャッシュ書き込み/ストアのミス
QTest::CachePrefetches19キャッシュのプリフェッチ
QTest::CachePrefetchMisses23キャッシュプリフェッチミス
QTest::ContextSwitches24コンテキストスイッチ
QTest::PageFaults25あらゆる種類のページフォールト
QTest::MinorPageFaults26マイナーページフォールト
QTest::MajorPageFaults27メジャー・ページフォールト
QTest::AlignmentFaults28アライメントのずれに起因するフォールト
QTest::EmulationFaults29ソフトウェアによるエミュレーションを必要としたフォールト

WalltimeNanoseconds およびBytesAllocated は、setBenchmarkResult() を通じてのみ利用可能であり、これらのメトリクスの結果はQTest フレームワークによって自動的に提供されることはない点に注意してください。

QTest::benchmarkMetricName() およびQTest::benchmarkMetricUnit()も参照してください 。

enum QTest::TestFailMode

この列挙型は、QVERIFY() やQCOMPARE() といったマクロによるチェックが失敗することが分かっている場合の処理モードを定義します。このモードは、チェックが失敗するか成功するかに関係なく適用されます。

定数値説明
QTest::Abort1テストの実行を中止します。問題のあるチェックの後にテストをこれ以上実行し続ける意味がない場合に、このモードを使用します。
QTest::Continue2問題のあるチェックの後も、テストの実行を継続します。

関連項目: QEXPECT_FAIL()。

変数のドキュメント

[since 6.11] std::atomic<std::chrono::milliseconds> QTest::defaultTryTimeout

このグローバル変数には、QTRY_* 関数およびqWait で使用されるデフォルトのタイムアウト値が格納されます。

この変数の最も一般的な使用例は、テスト全体のタイムアウトを変更することです:

    using namespace std::chrono_literals;
    // Since the atomic itself (defaultTryTimeout) is the only data,
    // all reads and stores can be relaxed.
    QTest::defaultTryTimeout.store(1s, std::memory_order_relaxed);

ただし、QAtomicScopedValueRollback を使用することで、特定のスコープに対してタイムアウトを設定することも可能です:

    const auto timeoutRollback = QAtomicScopedValueRollback(
        QTest::defaultTryTimeout, 1s, std::memory_order_relaxed);

値にアクセスするには、load() を呼び出します:

    // Since the atomic itself is all the data, all reads and stores can be relaxed.
    QCOMPARE(QTest::defaultTryTimeout.load(std::memory_order_relaxed), 1s);

この変数は Qt 6.11 で導入されました。

関数のドキュメント

template <typename T> void QTest::addColumn(const char *name, T *dummy = 0)

現在のテストデータに、型が `T ` の列を追加します。name は列の名前です。dummy はバグのあるコンパイラに対する回避策であり、無視しても構いません。

この列に値を設定するには、newRow() を使用できます。実際のテストでデータを取得するには、QFETCH() を使用してください。

例:

    QTest::addColumn<int>("intval");
    QTest::addColumn<QString>("str");
    QTest::addColumn<double>("dbl");
    QTest::newRow("row1") << 1 << "hello" << 1.5;

注:この関数は 、テストフレームワークによって呼び出されるテストのデータ関数の一部としてのみ使用できます。

より詳細な例については、「データ駆動型テスト」を参照してください。

関連項目: QTest::newRow()、QFETCH()、およびQMetaType 。

QTestData &QTest::addRow(const char *format, ...)

現在のテストデータに新しい行を追加します。

この関数の引数は、format に準拠した書式設定を行うために std::snprintf() に渡されます。注意事項や制限事項については、std::snprintf() のドキュメントを参照してください。

テスト出力では、このフォーマット処理の結果として得られる名前を使用して、このテストデータによるテスト実行を識別します。

テーブルの各列ごとに1つの値として、データをストリームで読み込むために使用できる QTestData の参照を返します。

例:

    QTest::addColumn<int>("input");
    QTest::addColumn<QString>("output");
    QTest::addRow("%d", 0) << 0 << QString("0");
    QTest::addRow("%d", 1) << 1 << QString("1");

注:この関数は 、テストフレームワークによって呼び出されるテストのデータ関数の一部としてのみ呼び出すことができます。

より詳細な例については、「データ駆動型テスト」を参照してください。

newRow()、addColumn()、およびQFETCH()も参照してください 。

const char *QTest::benchmarkMetricName(QTest::QBenchmarkMetric metric)

列挙型値「metric 」を文字列として返します。

const char *QTest::benchmarkMetricUnit(QTest::QBenchmarkMetric metric)

指定されたmetric の測定単位を返します。

QPointingDevice *QTest::createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen, QInputDevice::Capabilities caps = QInputDevice::Capability::Position)

タッチイベントのシミュレーションを行うため、機能caps を持つ、devType 型のダミータッチデバイスを作成します。

このタッチデバイスは、Qtウィンドウシステムインターフェースに登録されます。通常は、テストケースクラス内でQPointingDevice メンバー変数を初期化するためにcreateTouchDevice()を使用し、すべてのテストで同じインスタンスを使用し、不要になった時点でそれを削除する必要があります。

QTest::QTouchEventSequence およびtouchEvent()も参照してください 。

const char *QTest::currentAppName()

現在実行中のバイナリの名前を返します。

const char *QTest::currentDataTag()

現在のテストデータの名前を返します。テストに割り当てられたテストデータがない場合、この関数はnullptr を返します。

[since 6.11] const char *QTest::currentGlobalDataTag()

現在のグローバルテストデータの名前を返します。テストにグローバルテストデータが割り当てられていない場合、この関数はnullptr を返します。

この関数は Qt 6.11 で導入されました。

bool QTest::currentTestFailed()

現在のテスト関数が失敗した場合は `true ` を返し、それ以外の場合は `false` を返します。

QTest::currentTestResolved()も参照してください 。

const char *QTest::currentTestFunction()

現在実行中のテスト関数の名前を返します。

例:

void MyTestClass::cleanup()
{
    if (qstrcmp(QTest::currentTestFunction(), "myDatabaseTest") == 0) {
        // clean up all database connections
        closeAllDatabases();
    }
}

[since 6.5] bool QTest::currentTestResolved()

現在のテスト関数が失敗またはスキップされた場合、true を返します。

これは、テストが失敗した場合、またはスキップが実行された場合に適用されます。この値が true の場合、テスト関数は早期に終了する必要があります。 特に、QTRY_* マクロおよびテストイベントループは、テスト関数内(ただし cleanup() 内を除く)で実行された場合、ループを早期に終了します。テストが本モジュールのマクロを使用するヘルパー関数を呼び出した後、この関数を使用して早期に戻るべきかどうかを判断できます。

この関数は Qt 6.5 で導入されました。

QTest::currentTestFailed()も参照してください 。

[since 6.3] void QTest::failOnWarning(const QRegularExpression &messagePattern)

messagePattern に一致する警告ごとに、テストログにテスト失敗を1件追加します。

テスト関数は、失敗が追加されても実行を継続します。代わりにテストを中止するには、currentTestFailed() を確認し、true の場合に早期に処理を終了することができます。

各警告について、最初に一致したパターンが失敗の原因となり、残りのパターンは無視されます。

各テスト関数の終了時には、すべてのパターンがクリアされます。

voidFileTest::loadFiles()
{
    QTest::failOnWarning(QRegularExpression("^読み込みに失敗しました"));

    // 以下の各パターンはテストの失敗を引き起こします:
    qWarning() << "Failed to load image";
    qWarning() << "Failed to load video";
}

特定の警告を引き起こすすべてのテストを失敗させるには、init() 内でこの関数に適切な正規表現を渡してください:

void FileTest::init()
{
    QTest::failOnWarning(
        QRegularExpression("QFile::.*: File(.*) already open"));
}

警告が発生した場合はすべて失敗させるという一般的なケースでは、パラメータを指定しないでください:

void FileTest::init()
{
    QTest::failOnWarning();
}

注: ignoreMessage() がこの関数よりも優先されるため、ignoreMessage() とfailOnWarning() の両方に指定されたパターンに一致する警告はすべて無視されます。

この関数は Qt 6.3 で導入されました。

QTEST_FATAL_FAILも参照してください 。

[since 6.8] void QTest::failOnWarning()

警告が出力された場合、テストログにテストの失敗を付加します。

この関数は、QTest::failOnWarning() をオーバーロードします。

この関数は Qt 6.8 で導入されました。

failOnWarning(const char *)も参照してください 。

[since 6.3] void QTest::failOnWarning(const char *message)

message が出力された場合、テストログにテストの失敗を付加します。

この関数は、QTest::failOnWarning() をオーバーロードします。

この関数は Qt 6.3 で導入されました。

failOnWarning()も参照してください 。

void QTest::ignoreMessage(QtMsgType type, const char *message)

qDebug()、qInfo()、またはqWarning() によって生成されたメッセージを無視します。対応するtype を含むmessage が出力された場合、それはテストログから削除されます。テストが終了し、message が出力されなかった場合、テスト失敗の記録がテストログに追加されます。

注: この関数を呼び出すと 、1つのメッセージのみが無視されます。無視したいメッセージが2回出力された場合は、ignoreMessage()も2回呼び出す必要があります。

例:

QDir dir;
QTest::ignoreMessage(QtWarningMsg, "QDir::mkdir: Empty or null file name(s)");
dir.mkdir("");

上記の例では、無効なファイル名で呼び出された際に、QDir::mkdir() が正しい警告を出力するかどうかをテストしています。

注: message は UTF-8として解釈されます。

void QTest::ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)

qDebug()、qInfo()、またはqWarning() によって生成されたメッセージを無視します。messagePattern に一致し、対応するtype を持つメッセージが出力された場合、そのメッセージはテストログから削除されます。テストが終了した時点でそのメッセージが出力されていなかった場合、テストログの末尾にテスト失敗の記録が追加されます。

注: この関数を呼び出しても 、1つのメッセージのみが無視されます。無視したいメッセージが2回出力された場合は、ignoreMessage()も2回呼び出す必要があります。

これはオーバーロードされた関数です。

void QTest::keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

widget 上で、オプションのmodifier を指定して、key のクリックをシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーをクリックします。

例:

QTest::keyClick(myWidget, Qt::Key_Escape);

QTest::keyClick(myWidget, Qt::Key_Escape, Qt::ShiftModifier, 200);

上記の最初の例は、myWidget で、キーボードの修飾キーを使用せず、遅延も設けずにescape キーをクリックすることをシミュレートします。2番目の例は、テストを200ミリ秒遅延させた後、myWidget でshift-escape をクリックすることをシミュレートします。

QTest::keyClicks()も参照してください 。

void QTest::keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

widget 上で、オプションのmodifier を指定して、key のクリックをシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーをクリックします。

例:

QTest::keyClick(myWidget, 'a');

上記の例は、キーボードの修飾キーを使用せず、テストの遅延も設定せずに、myWidget 上のa をクリックすることをシミュレートしています。

これはオーバーロードされた関数です。

QTest::keyClicks()も参照してください 。

void QTest::keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

window 上で、オプションのmodifier を指定して、key のクリックをシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーをクリックします。

例:

QTest::keyClick(&myWindow, Qt::Key_Escape);
QTest::keyClick(&myWindow, Qt::Key_Escape, Qt::ShiftModifier, 200);

上記の最初の例は、キーボード修飾キーを使用せず、遅延も設けずに、myWindow でescape キーをクリックすることをシミュレートします。2番目の例は、テストが200 ms遅延した後、myWindow でshift-escape をクリックすることをシミュレートします。

これはオーバーロードされた関数です。

QTest::keyClicks()も参照してください 。

void QTest::keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

window 上で、オプションのmodifier を指定して、key のクリックをシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーをクリックします。

例:

QWidget myWindow;
QTest::keyClick(&myWindow, Qt::Key_Tab);

上記の例は、キーボードの修飾キーを使用せず、テストの遅延も設定せずに、myWindow 上でa をクリックすることをシミュレートしています。

これはオーバーロードされた関数です。

QTest::keyClicks()も参照してください 。

void QTest::keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

widget 上のsequence のキーをクリックしたことをシミュレートします。オプションで、キーボードのmodifier を指定できるほか、各キークリックの前にテストのdelay (ミリ秒単位)を指定することもできます。

例:

QTest::keyClicks(myWidget, "hello world");

上記の例は、キーボード修飾キーを使用せず、テストの遅延も設定せずに、myWidget 上の「hello world」を表すキーのシーケンスをクリックすることをシミュレートします。

QTest::keyClick()も参照してください 。

void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

指定されたkey と関連付けられたaction を用いて、widget にQtキーイベントを送信します。オプションで、キーボードmodifier を指定できるほか、イベントを送信する前のテストのdelay (ミリ秒単位)も指定できます。

void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

指定されたキーascii と、それに関連付けられたaction を用いて、widget にQtキーイベントを送信します。オプションで、キーボードmodifier を指定できるほか、イベントを送信する前のテスト期間であるdelay (ミリ秒単位)を指定することもできます。

これはオーバーロードされた関数です。

void QTest::keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

指定されたkey および関連するaction を使用して、window にQtキーイベントを送信します。オプションで、キーボードのmodifier を指定できるほか、イベントを送信する前のテストのdelay (ミリ秒単位)を指定することもできます。

これはオーバーロードされた関数です。

void QTest::keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

指定されたキーascii および関連付けられたaction を使用して、window にQtキーイベントを送信します。オプションで、キーボードmodifier を指定できるほか、イベントを送信する前のテストのdelay (ミリ秒単位)を指定することもできます。

これはオーバーロードされた関数です。

void QTest::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

widget 上で、オプションのmodifier を指定してkey の押下をシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーを押下します。

注: いずれの時点か、 keyRelease() を使用してキーを離す必要があります。

QTest::keyRelease() およびQTest::keyClick()も参照してください 。

void QTest::keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

widget 上で、オプションのmodifier を指定してkey が押されたことをシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーを押します。

注:いずれは、 keyRelease() を使用してキーを離す必要があります。

これはオーバーロードされた関数です。

QTest::keyRelease() およびQTest::keyClick()も参照してください 。

void QTest::keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

window 上で、オプションのmodifier を指定してkey を押下したことをシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーを押下します。

注: ある時点で、 keyRelease() を使用してキーを離す必要があります。

これはオーバーロードされた関数です。

QTest::keyRelease() およびQTest::keyClick()も参照してください 。

void QTest::keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

window 上で、オプションの `modifier ` を使用して、key を押下した状態をシミュレートします。`delay ` が 0 より大きい場合、テストはキーを押下する前に `delay ` ミリ秒待機します。

注:いずれは、 keyRelease() を使用してキーを離す必要があります。

これはオーバーロードされた関数です。

QTest::keyRelease() およびQTest::keyClick()も参照してください 。

void QTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

widget 上で、オプションのmodifier を指定してkey を解放する処理をシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーを解放します。

QTest::keyPress() およびQTest::keyClick()も参照してください 。

void QTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

widget 上で、オプションのmodifier を指定してkey を解放する動作をシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーを解放します。

これはオーバーロードされた関数です。

QTest::keyClick()も参照してください 。

void QTest::keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

window 上で、オプションのmodifier を指定してkey を解放する動作をシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーを解放します。

これはオーバーロードされた関数です。

QTest::keyPress() およびQTest::keyClick()も参照してください 。

void QTest::keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

window 上で、オプションのmodifier を指定してkey を解放する処理をシミュレートします。delay が0より大きい場合、テストはdelay ミリ秒待機してからキーを解放します。

これはオーバーロードされた関数です。

QTest::keyClick()も参照してください 。

void QTest::keySequence(QWidget *widget, const QKeySequence &keySequence)

widget に「keySequence 」と入力する動作をシミュレートします。

これはオーバーロードされた関数です。

QTest::keyClick() およびQTest::keyClicks()も参照してください 。

void QTest::keySequence(QWindow *window, const QKeySequence &keySequence)

window に「keySequence 」と入力する動作をシミュレートします。

これはオーバーロードされた関数です。

QTest::keyClick() およびQTest::keyClicks()も参照してください 。

void QTest::mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

widget 上で、オプションのmodifier を指定して、button のマウスクリックをシミュレートします。クリック位置はpos で定義され、デフォルトの位置はウィジェットの中心です。delay が指定された場合、テストはボタンの押下および離しの前に、指定されたミリ秒数だけ待機します。

QTest::mousePress() およびQTest::mouseRelease()も参照してください 。

void QTest::mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

window 上で、オプションのstateKey 修飾子付きで、マウスクリックbutton をシミュレートします。クリック位置はpos で定義され、デフォルトの位置はウィンドウの中心です。delay が指定されている場合、テストはボタンを押す前および離す前に、指定されたミリ秒数だけ待機します。

これはオーバーロードされた関数です。

QTest::mousePress() およびQTest::mouseRelease()も参照してください 。

void QTest::mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

widget 上で、オプションのmodifier を指定して、button へのマウスダブルクリックをシミュレートします。クリック位置はpos で定義され、デフォルトの位置はウィジェットの中心です。delay が指定されている場合、テストは各クリックと離しの前に、指定されたミリ秒数だけ待機します。

QTest::mouseClick()も参照してください 。

void QTest::mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

window 上で、オプションのstateKey 修飾子付きで、マウスbutton のダブルクリックをシミュレートします。クリック位置はpos で定義され、デフォルトの位置はウィンドウの中心です。delay が指定されている場合、テストは各押下および離しの前に、指定されたミリ秒数だけ待機します。

これはオーバーロードされた関数です。

QTest::mouseClick()も参照してください 。

void QTest::mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1)

マウスポインタをwidget の位置に移動します。pos が指定されていない場合、マウスポインタはウィジェットの中心に移動します。delay (ミリ秒単位)が指定されている場合、テストはマウスポインタを移動する前に一定時間待機します。

void QTest::mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1)

マウスポインタをwindow の位置に移動します。pos が指定されていない場合、マウスポインタはウィンドウの中央に移動します。delay (ミリ秒単位)が指定された場合、テストはマウスポインタを移動する前に待機します。

これはオーバーロードされた関数です。

void QTest::mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

widget 上で、オプションのmodifier を指定して、マウスbutton のクリックをシミュレートします。位置はpos で定義されます。デフォルトの位置はウィジェットの中心です。delay が指定された場合、テストは指定されたミリ秒数だけ待機してからクリックを行います。

QTest::mouseRelease() およびQTest::mouseClick()も参照してください 。

void QTest::mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

window 上で、オプションでstateKey 修飾キーを指定して、マウスボタンbutton を押下したことをシミュレートします。位置はpos で定義され、デフォルトの位置はウィンドウの中心です。delay が指定された場合、テストは指定されたミリ秒数だけ待機してからボタンを押下します。

これはオーバーロードされた関数です。

QTest::mouseRelease() およびQTest::mouseClick()も参照してください 。

void QTest::mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

widget 上で、オプションのmodifier を指定して、マウスbutton のリリースをシミュレートします。リリース位置はpos で定義され、デフォルトの位置はウィジェットの中心です。delay が指定された場合、テストは指定されたミリ秒数だけ待機してからボタンを離します。指定がない場合は、デフォルトの時間(1 ms)待機しますが、これはコマンドライン引数で上書き可能です。

注: イベントを個別に送信してダブルクリックをテストしたい場合は 、両方のマウス離しイベントで、デフォルト値より長い短い遅延を指定してください。押下、離し、押下、離しの遅延の合計は、QStyleHints::mouseDoubleClickInterval() 未満でなければなりません。ただし、イベント間の状態を確認する必要がない場合は、QTest::mouseDClick() を使用することをお勧めします。

QSignalSpy doubleClickSpy(target, &TargetClass::doubleClicked);
const QPoint p(1, 2);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p);
QVERIFY(target.isPressed());
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.isPressed(), false);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.pressCount(), 2);
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(doubleClickSpy.count(), 1);

QTest::mousePress() およびQTest::mouseClick()も参照してください 。

void QTest::mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

window 上で、オプションのstateKey 修飾子付きで、マウスbutton のボタンを離すことをシミュレートします。ボタンを離す位置はpos で定義されます。デフォルトの位置はウィンドウの中心です。delay が指定された場合、テストは指定されたミリ秒数だけ待機してからボタンを離します。指定がない場合は、デフォルトの時間(1 ms)待機しますが、これはコマンドライン引数で上書き可能です。

注: イベントを個別に送信してダブルクリックをテストする場合は 、両方のマウス離しイベントで、デフォルト値より長い短い遅延を指定してください。押下、離し、押下、離しの遅延の合計は、QStyleHints::mouseDoubleClickInterval() 未満でなければなりません。ただし、イベント間の状態を確認する必要がない場合は、QTest::mouseDClick() を使用することをお勧めします。

QSignalSpy doubleClickSpy(target, &TargetClass::doubleClicked);
const QPoint p(1, 2);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p);
QVERIFY(target.isPressed());
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.isPressed(), false);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.pressCount(), 2);
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(doubleClickSpy.count(), 1);

これはオーバーロードされた関数です。

QTest::mousePress() およびQTest::mouseClick()も参照してください 。

QTestData &QTest::newRow(const char *dataTag)

現在のテストデータに新しい行を追加します。

テスト出力では、このテストデータによるテスト実行が「dataTag 」という名前で識別されます。

テーブルの各列ごとに 1 つの値としてデータをストリーム入力するために使用できる QTestData 参照を返します。

例:

void MyTestClass::addSingleStringRows()
{
    QTest::addColumn<QString>("aString");
    QTest::newRow("just.hello") << QString("hello");
    QTest::newRow("a.null.string") << QString();
}

注:この関数は 、テストフレームワークによって呼び出されるテストのデータ関数の一部としてのみ呼び出すことができます。

より詳細な例については、「データ駆動型テスト」を参照してください。

関連項目: addRow()、addColumn()、およびQFETCH()も参照してください 。

int QTest::qExec(QObject *testObject, int argc = 0, char **argv = nullptr)

testObject で宣言されたテストを実行します。さらに、initTestCase() 、cleanupTestCase() 、init() 、cleanup() というプライベートスロットが存在する場合は、それらも実行されます。詳細については、「テストの作成」を参照してください。

オプションとして、コマンドライン引数 `argc ` および `argv ` を指定できます。認識される引数のリストについては、「Qt Test コマンドライン引数」を参照してください。

次の例は、MyTestObject 内のすべてのテストを実行します:

MyTestObject test1;
QTest::qExec(&test1);

この関数は、失敗したテストがない場合は 0 を返し、1 つ以上のテストが失敗した場合や未処理の例外が発生した場合は 0 以外の値を返します。(スキップされたテストは戻り値に影響しません。)

スタンドアロンのテストアプリケーションの場合、便利なマクロ `QTEST_MAIN()` を使用することで、コマンドライン引数を解析してテストを実行する `main()` 関数を宣言でき、この関数を明示的に呼び出す必要がなくなります。

QTEST_MAIN() マクロを使用する場合、この関数の戻り値はテストアプリケーションの終了コードにもなります。

スタンドアロンのテストアプリケーションの場合、テスト出力をファイルに記録したり、個々のテスト関数を実行したりするためのコマンドラインオプションが正しく動作しなくなるため、この関数を 2 回以上呼び出してはなりません。

注:この関数は再入可能ではないため 、一度に実行できるテストは 1 つだけです。qExec() で実行されたテストは、qExec() を通じて別のテストを実行することはできず、スレッドが同時に qExec() を呼び出すことも許可されません。

main() の引数から取得するのではなく、プログラムで引数を作成した場合は、Unicode に対応している QTest::qExec(QObject *, constQStringList &) を使用するとよいでしょう。

QTEST_MAIN()、QTEST_GUILESS_MAIN()、およびQTEST_APPLESS_MAIN()も参照してください 。

int QTest::qExec(QObject *testObject, const QStringList &arguments)

qExec(QObject *, int, char**) とまったく同じように動作しますが、char** のリストの代わりに、arguments のQStringList を受け取ります。

これはオーバーロードされた関数です。

QSharedPointer<QTemporaryDir> QTest::qExtractTestData(const QString &dirName)

リソースからディレクトリをディスクに抽出します。内容は一時フォルダに再帰的に抽出されます。返り値への最後の参照がスコープ外になると、抽出された内容は自動的に削除されます。

dirName は、リソースから抽出するディレクトリの名前です。

データが抽出された一時ディレクトリを返します。エラーが発生した場合は null を返します。

[since 6.5] void QTest::qRegisterTestCase(const QString &name, QTest::TestEntryFunction entryFunction)

テスト「name 」を、エントリ関数「entryFunction 」とともに、現在のバイナリ用の中央テストケースレジストリに登録します。

name は、引数を指定せずにバッチテストバイナリを実行した際に一覧表示されます。テストバイナリをname のargv[1]を指定して実行すると、entryFunction が呼び出されます。

この関数は Qt 6.5 で導入されました。

[since 6.7] void QTest::qSleep(std::chrono::milliseconds msecs)

msecs の間スリープし、テストの実行をブロックします。

このメソッドはイベント処理を行わず、テストが応答しなくなります。スリープ中にネットワーク通信がタイムアウトする可能性があります。ノンブロッキングなスリープを行うには、QTest::qWait() を使用してください。

msecs は 0ms より大きくなければなりません。

注: Qt 6.7以降 、この関数は `std::this_thread::sleep_for` を使用して実装されているため、経過時間の精度は標準ライブラリの実装に依存します。Qt 6.7 以前では、この関数は Unix では `nanosleep() `、Windows では `Sleep() ` を呼び出していたため、この関数での経過時間の精度はオペレーティングシステムに依存していました。

例:

using namespace std::chrono_literals;
QTest::qSleep(250ms);

この関数は Qt 6.7 で導入されました。

QTest::qWait()も参照してください 。

void QTest::qSleep(int ms)

ms ミリ秒間スリープし、テストの実行をブロックします。

以下の呼び出しと同等です:

QTest::qSleep(std::chrono::milliseconds{ms});

これはオーバーロードされた関数です。

[since 6.7] void QTest::qWait(std::chrono::milliseconds msecs)

msecs を待機します。待機中はイベントが処理され、テストはユーザーインターフェースのイベントやネットワーク通信に対して応答性を維持します。

例:

    using namespace std::chrono_literals;
    int i = 0;
    while (myNetworkServerNotResponding() && i++ < 50)
        QTest::qWait(250ms);

上記のコードは、ネットワークサーバーからの応答があるまで、最大で約12.5秒間待機します。

QTRY_* マクロは、通常 qWait() よりも適しています。qWait() は常にタイムアウト時間が満了するまで一時停止するため、テストがアイドル状態になり、実行速度が低下する可能性があります。

QTRY_* マクロは、条件が成立するかタイムアウトが切れるまで定期的に状態を確認します。そのため、テストは可能な限り速やかに再開され、信頼性も高まります。それでも条件が満たされない場合、マクロはタイムアウト値を一度倍増させ、新しい値を報告するため、ユーザーはそれを調整することができます。

たとえば、上記のコードを次のように書き換えてください。

QTRY_VERIFY_WITH_TIMEOUT(!myNetworkServerNotResponding(), 12.5s);

この関数は Qt 6.7 で導入されました。

QTest::qSleep()、QSignalSpy::wait()、およびQTRY_VERIFY_WITH_TIMEOUT()も参照してください 。

void QTest::qWait(int msecs)

msecs を待ち受けます。以下の呼び出しと同等です:

QTest::qWait(std::chrono::milliseconds{msecs});

これはオーバーロードされた関数です。

[since 6.7] template <typename Functor> bool QTest::qWaitFor(Functor predicate, QDeadlineTimer deadline = QDeadlineTimer( defaultTryTimeout.load(std::memory_order_relaxed)))

deadline の有効期限が切れるか、predicate がtrueを返すかのいずれか早い方が発生するまで待機します。

predicate が任意の時点でtrueを返した場合、true を返します。それ以外の場合は、false を返します。

例:

    MyObject obj;
    obj.startup();
    using namespace std::chrono_literals;
    const bool result = QTest::qWaitFor([&obj]() { return obj.isReady(); },
                                        QDeadlineTimer(3s));

上記のコードは、オブジェクトの準備が整うまで、最大3秒間待機します。

この関数は Qt 6.7 で導入されました。

template <typename Functor> bool QTest::qWaitFor(Functor predicate, int timeout)

timeout ミリ秒間待機するか、predicate がtrueを返すまで待機します。

これは、次の呼び出しと同等です:

qWaitFor(predicate, QDeadlineTimer(timeout));

これはオーバーロードされた関数です。

[since 6.10] bool QTest::qWaitForWindowActive(QWidget *widget, QDeadlineTimer timeout)

widget がtimeout ミリ秒以内にアクティブである場合、true を返します。そうでない場合は、false を返します。

このメソッドは、QWidget::show() を呼び出し、処理を進める前にウィジェットが実際にアクティブ(つまり、表示されており、フォーカスが当てられている)であることを前提とするテストで役立ちます。

注: 別のウィンドウによってwidget がアクティブになるのを妨げられた場合、この メソッドは タイムアウトとなり、false を返します。

注: フォーカスは排他的なプロパティであるため 、widget は、このメソッドがtrue を返した後であっても、いつでも別のウィンドウにフォーカスを奪われる可能性があります。

この関数は Qt 6.10 で導入されました。

qWaitForWindowExposed() およびQWidget::isActiveWindow()も参照してください 。

[since 6.10] bool QTest::qWaitForWindowActive(QWindow *window, QDeadlineTimer timeout)

timeout 内でwindow がアクティブな場合、true を返します。そうでない場合は、false を返します。

このメソッドは、QWindow::show() を呼び出し、処理を進める前にそのウィンドウが実際にアクティブ(つまり、表示されており、フォーカスが当てられている状態)であることを前提とするテストで役立ちます。

注: 別のウィンドウによってwindow がアクティブになるのを妨げられた場合、この メソッドは タイムアウトし、false を返します。

注: フォーカスは排他的なプロパティであるため 、window は、このメソッドがtrue を返した後であっても、いつでも別のウィンドウにフォーカスを奪われる可能性があります。

この関数は Qt 6.10 で導入されました。

関連項目: qWaitForWindowExposed()、qWaitForWindowFocused()、QWindow::isActive()を参照してください 。

[since 6.10] bool QTest::qWaitForWindowActive(QWidget *widget)

この関数は、デフォルトのタイムアウトである5秒を使用します。

これはオーバーロードされた関数です。

この関数は Qt 6.10 で導入されました。

[since 6.10] bool QTest::qWaitForWindowActive(QWindow *window)

この関数は、デフォルトのタイムアウト値である5秒を使用します。

これはオーバーロードされた関数です。

この関数は Qt 6.10 で導入されました。

bool QTest::qWaitForWindowActive(QWidget *widget, int timeout)

timeout はミリ秒単位です。

これはオーバーロードされた関数です。

bool QTest::qWaitForWindowActive(QWindow *window, int timeout)

timeout はミリ秒単位です。

これはオーバーロードされた関数です。

[since 6.10] bool QTest::qWaitForWindowExposed(QWidget *widget, QDeadlineTimer timeout)

widget がtimeout ミリ秒以内に表示された場合、true を返します。そうでない場合は、false を返します。

このメソッドは、QWidget::show() を呼び出し、処理を進める前にウィジェットが実際に表示されていることを確認する必要があるテストで役立ちます。

注:ウィンドウが 画面にマッピングされていても、ウィンドウのクライアント領域が表示されていない場合(例えば、他のウィンドウに完全に覆われている場合など)、そのウィンドウは 「露出済み」とは見なされないことがあります。そのような場合、このメソッドはタイムアウトとなり、false を返します。

この関数は Qt 6.10 で導入されました。

関連項目: qWaitForWindowActive()、QWidget::isVisible()、およびQWindow::isExposed()。

[since 6.10] bool QTest::qWaitForWindowExposed(QWindow *window, QDeadlineTimer timeout)

timeout 内でwindow が公開されている場合はtrue を返します。そうでない場合はfalse を返します。

このメソッドは、QWindow::show() を呼び出し、処理を進める前にウィンドウが実際に表示されていることを確認する必要があるテストで役立ちます。

注: ウィンドウのクライアント領域が表示されていない場合(例えば、他のウィンドウに完全に覆われている場合など)、画面にマッピングされたウィンドウであっても 、まだ「公開済み」とは見なされないことがあります。そのような場合、このメソッドはタイムアウトし、false を返します。

この関数は Qt 6.10 で導入されました。

qWaitForWindowActive() およびQWindow::isExposed()も参照してください 。

[since 6.10] bool QTest::qWaitForWindowExposed(QWidget *widget)

この関数は、デフォルトのタイムアウト値である5秒を使用します。

これはオーバーロードされた関数です。

この関数は Qt 6.10 で導入されました。

[since 6.10] bool QTest::qWaitForWindowExposed(QWindow *window)

この関数は、デフォルトのタイムアウト値である5秒を使用します。

これはオーバーロードされた関数です。

この関数は Qt 6.10 で導入されました。

bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout)

timeout はミリ秒単位です。

これはオーバーロードされた関数です。

bool QTest::qWaitForWindowExposed(QWindow *window, int timeout)

timeout はミリ秒単位です。

これはオーバーロードされた関数です。

[since 6.7] bool QTest::qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout)

widget がtimeout 内のフォーカスウィンドウである場合、true を返します。そうでない場合は、false を返します。

このメソッドは、QWidget::show() を呼び出し、処理を進める前にウィジェットがフォーカス状態にあること(キーボードイベントの受信など)を前提とするテストで役立ちます。

注: 別のウィンドウがwidget のフォーカスを妨げている場合、この メソッドは タイムアウトとなり、false を返します。

注: フォーカスは排他的なプロパティであるため 、widget は、このメソッドがtrue を返した後であっても、いつでも別のウィンドウにフォーカスを奪われる可能性があります。

この関数は Qt 6.7 で導入されました。

関連項目: qWaitForWindowExposed()、qWaitForWindowActive()、およびQGuiApplication::focusWindow()も参照してください 。

[since 6.7] bool QTest::qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout)

window がtimeout 内のフォーカスウィンドウである場合、true を返します。そうでない場合は、false を返します。

このメソッドは、QWindow::show() を呼び出し、処理を進める前にウィンドウがフォーカスされていること(例えば、キーボードイベントを受信するためなど)を前提とするテストで役立ちます。

注: 別のウィンドウによってwindow がフォーカスを得られなくなった場合、この メソッドは タイムアウトし、false を返します。

注: フォーカスは排他的なプロパティであるため 、window は、このメソッドがtrue を返した後であっても、いつでも別のウィンドウにフォーカスを奪われる可能性があります。

この関数は Qt 6.7 で導入されました。

関連項目: qWaitForWindowExposed()、qWaitForWindowActive()、およびQGuiApplication::focusWindow()も参照してください 。

[since 6.10] bool QTest::qWaitForWindowFocused(QWidget *widget)

この関数は、デフォルトのタイムアウト値である5秒を使用します。

これはオーバーロードされた関数です。

この関数は Qt 6.10 で導入されました。

[since 6.10] bool QTest::qWaitForWindowFocused(QWindow *window)

この関数は、デフォルトのタイムアウトである5秒を使用します。

これはオーバーロードされた関数です。

この関数は Qt 6.10 で導入されました。

void QTest::setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric)

このテスト関数のベンチマーク結果を「result 」に設定します。

QBENCHMARKマクロを使用せずにベンチマーク結果を報告したい場合は、この関数を使用してください。metric を使用して、Qt Test が結果をどのように解釈すべきかを指定します。

結果のコンテキストは、テスト関数名および_data関数からのデータタグとなります。この関数は各テスト関数内で1回のみ呼び出すことができ、それ以降の呼び出しでは以前に報告された結果が上書きされます。

なお、-iterations コマンドライン引数は、QBENCHMARK マクロを使用していないテスト関数には影響を与えません。

[noexcept, since 6.8] void QTest::setThrowOnFail(bool enable)

QCOMPARE() やQVERIFY() の失敗時に例外をスローするように有効化(enable =true )または無効化(enable =false )します(直近の関数コンテキストから単に返るだけとは対照的です)。

この機能は参照カウント方式を採用しています。true を指定してこの関数をN回呼び出した場合、元の状態に戻るにはfalse をN回呼び出す必要があります。

QTEST_THROW_ON_FAIL C++ マクロが定義されている場合、この呼び出しは効果を持ちません。

注: この機能を使用するには、例外を有効にしてテストをコンパイルする必要があります 。

この関数は Qt 6.8 で導入されました。

setThrowOnSkip()、ThrowOnFailEnabler 、ThrowOnFailDisabler 、およびQTEST_THROW_ON_FAILも参照してください 。

[noexcept, since 6.8] void QTest::setThrowOnSkip(bool enable)

QSKIP() の実行時に例外をスローするように有効化(enable =true )または無効化(enable =false )します(直近の関数コンテキストから単に返るだけの場合とは対照的です)。

この機能は参照カウント方式を採用しています。true を指定してこの関数をN回呼び出した場合、元の状態に戻すにはfalse を指定してN回呼び出す必要があります。

QTEST_THROW_ON_SKIP というC++マクロが定義されている場合、この呼び出しは効果を持ちません。

注: この機能を使用するには、例外を有効にしてテストをコンパイルする必要があります 。

この関数は Qt 6.8 で導入されました。

setThrowOnFail()、ThrowOnSkipEnabler 、ThrowOnSkipDisabler 、およびQTEST_THROW_ON_SKIPも参照してください 。

char *QTest::toHexRepresentation(const char *ba, qsizetype length)

文字列 `ba ` を、スペースで区切られた16進文字のシーケンスとして表した文字列へのポインタを返します。入力が長すぎると判断された場合は、切り捨てられます。切り捨てられた場合は、返される文字列の末尾に省略記号(…)で示されます。呼び出し元は、返されたポインタの所有権を持ち、後で `operator delete[]` に確実に渡す必要があります。

length は、文字列ba の長さです。

template <typename T> char *QTest::toString(const T &value)

value のテキスト表現を返します。この関数は、QCOMPARE() によって、テストが失敗した際に詳細情報を出力するために使用されます。

テストにこの関数の特化やオーバーロードを追加することで、詳細な出力を有効にすることができます。

注: Qt 5.5以降では 、このテンプレートを特殊化する代わりに、型の名前空間内で toString() 関数を定義することを推奨します。コードが Qt 5.4 以前の QTestLib でも引き続き動作する必要がある場合は、特殊化を引き続き使用する必要があります。

注: toString()を呼び出す側は 、delete[] を使用して、返されたデータを削除する必要があります。実装では、new[] またはqstrdup() を使用して作成された文字列を返す必要があります。これを行う最も簡単な方法は、QByteArray またはQString を作成し、それに対して QTest::toString() を呼び出すことです(以下の 2 番目の例を参照)。

特化の例(Qt ≤ 5.4):

namespace QTest {
    template<>
    char *toString(const MyPoint &point)
    {
        const QByteArray ba("MyPoint("
                            + QByteArray::number(point.x()) + ", "
                            + QByteArray::number(point.y()) + ')');
        return qstrdup(ba.data());
    }
}

上記の例では、MyPoint というクラスに対してtoString()の特化を定義しています。MyPoint の2つのインスタンスの比較が失敗した場合、QCOMPARE()はこの関数を呼び出し、MyPoint の内容をテストログに出力します。

同じ例ですが、オーバーロードを使用した場合(Qt 5.5 以降):

char *toString(const MyPoint &point) // should be inside the same namespace as MyPoint
{
    return QTest::toString("MyPoint(" +
                           QByteArray::number(point.x()) + ", " +
                           QByteArray::number(point.y()) + ')');
}

QCOMPARE()も参照してください 。

char *toString(QSizePolicy sp)

サイズポリシー `sp` のテキスト表現を返します。

これはオーバーロードされた関数です。

char *toString(QSizePolicy::ControlType ct)

制御型 `ct` の文字列表現を返します。

これはオーバーロードされた関数です。

char *toString(QSizePolicy::ControlTypes cts)

制御型のテキスト表現を返します。cts 。

これはオーバーロードされた関数です。

char *toString(QSizePolicy::Policy p)

ポリシー `p` のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QByteArray &ba)

バイト配列 `ba` の文字列表現を返します。

これはオーバーロードされた関数です。

QTest::toHexRepresentation()も参照してください 。

char *QTest::toString(const QCborError &c)

指定されたCBORエラーc のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QChar &character)

指定されたcharacter のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QDate &date)

指定されたdate のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QDateTime &dateTime)

dateTime で指定された日付と時刻のテキスト表現を返します。

これはオーバーロードされた関数です。

[since 6.5] char *QTest::toString(const QKeySequence &ks)

キーシーケンス `ks` のテキスト表現を返します。

これはオーバーロードされた関数です。

この関数は Qt 6.5 で導入されました。

char *QTest::toString(const QLatin1StringView &string)

指定されたstring のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QPoint &point)

指定されたpoint のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QPointF &point)

指定されたpoint のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QRect &rectangle)

指定されたrectangle のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QRectF &rectangle)

指定されたrectangle のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QSize &size)

指定されたsize のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QSizeF &size)

指定されたsize のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QString &string)

指定されたstring のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QStringView &string)

指定されたstring のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QTime &time)

指定されたtime のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QUrl &url)

指定されたurl のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QUuid &uuid)

指定されたuuid のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QVariant &variant)

指定されたvariant のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QVector2D &v)

2次元ベクトル `v` の文字列表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QVector3D &v)

3Dベクトル `v` の文字列表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(const QVector4D &v)

4次元ベクトル `v` の文字列表現を返します。

これはオーバーロードされた関数です。

template <typename T1, typename T2> char *QTest::toString(const std::pair<T1, T2> &pair)

pair のテキスト表現を返します。

これはオーバーロードされた関数です。

template <typename... Types> char *QTest::toString(const std::tuple<Types...> &tuple)

指定されたtuple のテキスト表現を返します。

これはオーバーロードされた関数です。

char *QTest::toString(std::nullptr_t)

nullptr を含む文字列を返します。

これはオーバーロードされた関数です。

QTest::QTouchEventWidgetSequence QTest::touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)

device に対して、widget のイベントをシミュレートするためのQTouchEventSequence を作成して返します。

シーケンスにタッチイベントを追加する際、press() や move() などの各呼び出しで別のウィジェットが指定されていない限り、widget を使用して、指定された位置を画面座標に変換します。

autoCommit autoCommit がfalseに設定されていない限り、 のデストラクタが呼び出されたとき(つまり、返されたオブジェクトのスコープが終了したとき)、タッチイベントはイベントシステムにコミットされます。 がfalseの場合、commit()を手動で呼び出す必要があります。QTouchEventSequence

createTouchDevice() を呼び出すことで、この関数で使用するためのテスト用タッチデバイスを作成できます。

QTest::QTouchEventSequence QTest::touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)

device 用のQTouchEventSequence を作成して返し、window のイベントをシミュレートします。

シーケンスにタッチイベントを追加する際、press() や move() などの呼び出しで別のウィンドウが指定されていない限り、window を使用して、指定された位置を画面座標に変換します。

autoCommit がfalseに設定されていない限り、QTouchEventSequence のデストラクタが呼び出されたとき(つまり、返されたオブジェクトがスコープ外になったとき)、タッチイベントはイベントシステムにコミットされます。autoCommit がfalseの場合、commit()を手動で呼び出す必要があります。

createTouchDevice() を呼び出すことで、この関数で使用するためのテスト用タッチデバイスを作成できます。

[since 6.8] void QTest::wheelEvent(QWindow *window, QPointF pos, QPoint angleDelta, QPoint pixelDelta = QPoint(0, 0), Qt::KeyboardModifiers stateKey = Qt::NoModifier, Qt::ScrollPhase phase = Qt::NoScrollPhase)

window 内で、ローカルウィンドウ座標のpos の位置におけるホイールイベントをシミュレートします。angleDelta にはホイールの回転角度が格納されます。正の値は前方への回転を、負の値は後方への回転を表します。pixelDelta には、画面上のスクロール距離(ピクセル単位)が格納されます。この値はnullでも構いません。イベント発生時のキーボードの状態は、stateKey で指定されます。イベントのスクロールフェーズは、phase で指定されます。

この関数は Qt 6.8 で導入されました。

マクロのドキュメント

QBENCHMARK

このマクロは、テスト内のコードのパフォーマンスを測定するために使用されます。ベンチマークの対象となるコードは、このマクロに続くコードブロック内に記述されます。

例:

void TestBenchmark::simple()
{
    QString str1 = u"This is a test string"_s;
    QString str2 = u"This is a test string"_s;
    QCOMPARE(str1.localeAwareCompare(str2), 0);
    QBENCHMARK {
        str1.localeAwareCompare(str2);
    }
}

「ベンチマークの作成」および「ベンチマークの記述」も参照してください 。

QBENCHMARK_ONCE

QBENCHMARK_ONCE マクロは、コードブロックを 1 回実行してそのパフォーマンスを測定するためのものです。

このマクロは、テスト内のコードのパフォーマンスを測定するために使用されます。ベンチマークの対象となるコードは、このマクロに続くコードブロック内に記述されます。

QBENCHMARK とは異なり、このマクロに続くコードブロックの内容は 1 回だけ実行されます。経過時間が短すぎて、選択されたバックエンドで測定できない場合は、経過時間は「0」として報告されます。

「ベンチマークの作成」および「ベンチマークの記述」も参照してください 。

QCOMPARE(actual, expected)

QCOMPARE() マクロは、等号演算子を使用して、actual の値とexpected の値を比較します。actual とexpected が一致する場合、実行は続行されます。一致しない場合、テストログに失敗が記録され、テスト関数は以降のチェックを試みることなく終了します。

QCOMPARE() のパラメータのセマンティクスを常に遵守してください。この関数に渡される最初のパラメータは、常に被テストコードによって生成された実際の値であり、2番目のパラメータは常に期待値である必要があります。 値が一致しない場合、QCOMPARE() はそれらを「Actual」および「Expected」というラベル付きで出力します。パラメータの順序が入れ替わっていると、失敗したテストのデバッグが混乱を招く可能性があり、また、ゼロを期待するテストが丸め誤差によって失敗する可能性があります。

QCOMPARE() は、比較に失敗した場合、値の内容を出力しようとします。そのため、テストログから比較が失敗した理由を確認できます。

例:

QCOMPARE(QString("hello").toUpper(), QString("HELLO"));

浮動小数点型(float 、double 、およびqfloat16 )を比較する場合、有限値についてはqFuzzyCompare()が使用されます。両方の値に対してqFuzzyIsNull()が真となる場合、それらは等しいとみなされます。 無限大は符号が同じであれば一致し、実際の値が NaN であれば、期待値が NaN であっても(たとえ NaN と NaN が同一であっても NaN ≠ NaN であるにもかかわらず)一致します。

QList を比較する際、値型の配列や初期化リストを期待値として渡すことができます:

    const int expected[] = {8, 10, 12, 16, 20, 24};
    QCOMPARE(QFontDatabase::standardSizes(), expected);

初期化リストを使用する場合は、プリプロセッサがコンマをマクロ引数の区切り文字として解釈しないように、ヘルパーマクロを定義する必要があることに注意してください:

 #define ARG(...) __VA_ARGS__
     QCOMPARE(QFontDatabase::standardSizes(), ARG({8, 10, 12, 16, 20, 24}));
 #undef ARG

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

独自のクラスについては、QTest::toString() をオーバーロードして、テストログへの出力用に値のフォーマットを行うことができます。

例:

char *toString(const MyType &t)
{
    char *repr = new char[t.reprSize()];
    t.writeRepr(repr);
    return repr;
}

toString() からの戻り値はnew char [] でなければなりません。つまり、呼び出し側のコードでの使用が終了したら、delete[] (free() や単純なdelete ではなく)で解放される必要があります。

QVERIFY()、QTRY_COMPARE()、QTest::toString()、QEXPECT_FAIL()、QCOMPARE_EQ()、QCOMPARE_NE()、QCOMPARE_LT()、QCOMPARE_LE()、QCOMPARE_GT()、およびQCOMPARE_GE()も参照してください。

[since 6.9] QCOMPARE_3WAY(lhs, rhs, order)

QCOMPARE_3WAY() マクロは、入力式lhs およびrhs に対して三項比較演算子<=> を適用し、その結果がorder であるかどうかを検証します。これが真の場合、実行は続行されます。そうでない場合、テストログに失敗が記録され、テスト関数はそれ以降の検証を行わずに戻ります。 このマクロは、order の引数としてQt::およびstd::の順序付け型のみを受け付け、それ以外の場合はアサートを行います。

注: decltype(lhs <=> rhs) が stdの順序型であっても、order はQt::の順序型である可能性があります。decltype(lhs <=> rhs) 演算の結果は、order と同じ強度の順序型である必要があります。そうでない場合、このマクロを適用するとコンパイルエラーが発生します。例えば、decltype(lhs <=> rhs) の結果が弱い順序型である場合、order 引数には部分順序型や強い順序型を指定することはできません。

注:このマクロは 、コンパイラが<=> 演算子をサポートしている場合にのみ機能し、サポートされていない場合は、前提となる機能が利用できないことを静的にアサートします。マクロを使用する前に、必ず__cpp_lib_three_way_comparison が定義されているかを確認し、定義されていない場合は QSKIP を使用してください。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数でのみ使用できます。

独自のクラスについては、QTest::toString() をオーバーロードして、テストログへの出力用値の書式設定を行うことができます。

このマクロは Qt 6.9 で導入されました。

[since 6.4] QCOMPARE_EQ(computed, baseline)

QCOMPARE_EQ() マクロは、等号演算子を使用して、computed がbaseline と等しいかどうかを確認します。等しい場合、実行は続行されます。等しくない場合、テストログに失敗が記録され、テスト関数はそれ以降のチェックを行わずに戻ります。

これは一般的にQVERIFY(computed == baseline); を呼び出すのと同様ですが、失敗した場合には、computed およびbaseline の引数式と値を報告する、フォーマット済みのエラーメッセージを出力します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

独自のクラスでは、QTest::toString() をオーバーロードして、テストログへの出力用値の書式設定を行うことができます。

注: QCOMPARE() とは異なり 、このマクロはカスタム型やポインタに対するオーバーロードを提供していません。したがって、例えば 2 つのconst char * 値をパラメータとして渡すと、ポインタの比較が行われますが、QCOMPARE() では C スタイルの文字列の比較が行われます。

このマクロはQt 6.4で導入されました。

QCOMPARE()、QCOMPARE_NE()、QCOMPARE_LT()、QCOMPARE_LE()、QCOMPARE_GT()、およびQCOMPARE_GE()も参照してください 。

[since 6.4] QCOMPARE_GE(computed, baseline)

QCOMPARE_GE() マクロは、computed がbaseline 以上であるかどうかを「以上」演算子を用いてチェックします。条件が真の場合、実行は続行されます。そうでない場合、テストログに失敗が記録され、テスト関数はそれ以降のチェックを行わずに終了します。

これは一般的に `QVERIFY(computed >= baseline); ` を呼び出すのと同様ですが、失敗した場合には、引数式 `computed ` および `baseline ` の値を含む、フォーマット済みのエラーメッセージを出力します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

独自のクラスでは、QTest::toString() をオーバーロードして、テストログへの出力値をフォーマットすることができます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_EQ()、QCOMPARE_NE()、QCOMPARE_LT()、QCOMPARE_LE()、およびQCOMPARE_GT()も参照してください 。

[since 6.4] QCOMPARE_GT(computed, baseline)

QCOMPARE_GT() マクロは、大于演算子を使用して、computed がbaseline より大きいかどうかを確認します。真の場合、実行は続行されます。そうでない場合、テストログに失敗が記録され、テスト関数はそれ以降のチェックを行わずに戻ります。

これは一般的に `QVERIFY(computed > baseline); ` を呼び出すのと同様ですが、失敗した場合には、引数式および値である `computed ` と `baseline ` を報告する、フォーマット済みのエラーメッセージを出力します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数でのみ使用できます。

独自のクラスでは、QTest::toString() をオーバーロードして、テストログへの出力値をフォーマットすることができます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_EQ()、QCOMPARE_NE()、QCOMPARE_LT()、QCOMPARE_LE()、およびQCOMPARE_GE()も参照してください 。

[since 6.4] QCOMPARE_LE(computed, baseline)

QCOMPARE_LE() マクロは、computed がbaseline 以下であるかどうかを、以下(≤)演算子を使用してチェックします。これが真の場合、実行は続行されます。そうでない場合、テストログに失敗が記録され、テスト関数はそれ以降のチェックを試みることなく戻ります。

これは一般的に、QVERIFY(computed <= baseline); を呼び出すのと同様ですが、失敗した場合には、引数式および値であるcomputed とbaseline を報告する、フォーマット済みのエラーメッセージを出力します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

独自のクラスでは、QTest::toString() をオーバーロードして、テストログへの出力値をフォーマットすることができます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_EQ()、QCOMPARE_NE()、QCOMPARE_LT()、QCOMPARE_GT()、およびQCOMPARE_GE()も参照してください 。

[since 6.4] QCOMPARE_LT(computed, baseline)

QCOMPARE_LT() マクロは、computed がbaseline よりも小さいかどうかを、より小さい演算子を使用してチェックします。これが真の場合、実行は続行されます。そうでない場合、テストログに失敗が記録され、テスト関数はそれ以降のチェックを試みることなく戻ります。

これは、一般的に `QVERIFY(computed < baseline); ` を呼び出すのと同様ですが、失敗した場合には、引数式および値である `computed ` と `baseline ` を報告する、フォーマット済みのエラーメッセージを出力します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

独自のクラスでは、QTest::toString() をオーバーロードして、テストログへの出力用値の書式設定を行うことができます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_EQ()、QCOMPARE_NE()、QCOMPARE_LE()、QCOMPARE_GT()、およびQCOMPARE_GE()も参照してください 。

[since 6.4] QCOMPARE_NE(computed, baseline)

QCOMPARE_NE() マクロは、不等号演算子を使用して、computed がbaseline と等しくないことをチェックします。これが真の場合、実行は続行されます。そうでない場合、テストログに失敗が記録され、テスト関数はそれ以降のチェックを試みることなく戻ります。

これは一般的にQVERIFY(computed != baseline); を呼び出すのと同様ですが、失敗した場合には、computed およびbaseline の引数式と値を報告する、フォーマット済みのエラーメッセージを出力します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

独自のクラスでは、QTest::toString() をオーバーロードして、テストログへの出力用値をフォーマットすることができます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_EQ()、QCOMPARE_LT()、QCOMPARE_LE()、QCOMPARE_GT()、およびQCOMPARE_GE()も参照してください 。

QEXPECT_FAIL(dataIndex, comment, mode)

QEXPECT_FAIL() マクロは、直後のQCOMPARE() またはQVERIFY() を「予期された失敗」としてマークします。これにより、テストログに失敗が記録される代わりに、「予期された失敗」として報告されます。

QVERIFY() またはQCOMPARE() が「予期される失敗」としてマークされているにもかかわらず、実際には合格した場合、テストログに「予期せぬ合格 (XPASS)」が記録され、テストの失敗としてカウントされます。

パラメータdataIndex は、テストデータ内のどのエントリに対して失敗が予想されているかを指定します。すべてのエントリで失敗が予想される場合、またはテストデータが存在しない場合は、空の文字列 ("") を渡してください。

comment は、予想される失敗に関するテストログに追加されます。

mode はQTest::TestFailMode であり、テストの実行を継続するかどうかを設定します。mode は、想定されたテストの失敗が発生したかどうかに関係なく適用されます。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数でのみ使用できます。

例 1:

QEXPECT_FAIL("", "Will fix in the next release", Continue);
QCOMPARE(i, 42);
QCOMPARE(j, 43);

上記の例では、変数i の値が42でない場合、テスト出力に「予期された失敗」と書き込まれます。変数i の値が42の場合は、代わりに「予期せぬ成功」と書き込まれます。QEXPECT_FAIL()は、この例における2番目のQCOMPARE()ステートメントには影響を与えません。

例 2:

QEXPECT_FAIL("data27", "Oh my, this is soooo broken", Abort);
QCOMPARE(i, 42);

上記のテスト関数は、テストデータ「data27 」が指定された場合(i の値にかかわらず)、それ以上の実行を続行しません。

QTest::TestFailMode 、QVERIFY()、およびQCOMPARE()も参照してください 。

QFAIL(message)

このマクロを使用すると、テストを強制的に失敗させることができます。テストの実行が中止され、テストログに失敗メッセージ「message 」が追加されます。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

例:

if (sizeof(int) != 4)
    QFAIL("This test has not been ported to this platform yet.");

QFETCH(type, name)

fetchマクロは、スタック上にtype 型のname という名前のローカル変数を作成します。name およびtype は、テストのデータテーブルの列と一致している必要があります。これはアサーションの対象となり、アサーションが失敗した場合はテストが中止されます。

テストに以下のデータがあると仮定します:

void TestQString::toInt_data()
{
    QTest::addColumn<QString>("aString");
    QTest::addColumn<int>("expected");

    QTest::newRow("positive+value") << "42" << 42;
    QTest::newRow("negative-value") << "-42" << -42;
    QTest::newRow("zero") << "0" << 0;
}

テストデータには、QString 型の「aString 」と整数型の「expected 」という2つの要素があります。実際のテストでこれらの値を取得するには:

void TestQString::toInt()
{
     QFETCH(QString, aString);
     QFETCH(int, expected);

     QCOMPARE(aString.toInt(), expected);
}

aString およびexpected は、現在のテストデータで初期化されたスタック上の変数です。

注:このマクロは 、テストフレームワークによって呼び出されるテスト関数でのみ使用できます。テスト関数には、_data関数が必須です。

QFETCH_GLOBAL(type, name)

このマクロは、グローバルデータテーブルの行から、型がtype であるname という名前の変数を取得します。name とtype は、グローバルデータテーブルの列と一致している必要があります。これはアサーションの対象となり、アサーションが失敗した場合はテストが中止されます。

テストに以下のデータがあると仮定します:

void TestQLocale::initTestCase_data()
{
    QTest::addColumn<QLocale>("locale");
    QTest::newRow("C") << QLocale::c();
    QTest::newRow("UKish") << QLocale("en_GB");
    QTest::newRow("USAish") << QLocale(QLocale::English, QLocale::UnitedStates);
}

void TestQLocale::roundTripInt_data()
{
    QTest::addColumn<int>("number");
    QTest::newRow("zero") << 0;
    QTest::newRow("one") << 1;
    QTest::newRow("two") << 2;
    QTest::newRow("ten") << 10;
}

テスト固有のデータは、各行につき1つの数値です。この場合、initTestCase_data() も各行ごとにロケールを提供します。 したがって、このテストは、後者のロケールと前者の数値のすべての組み合わせで実行されます。つまり、グローバルテーブルに4行、ローカルテーブルに3行ある場合、テスト関数は12個の異なるテストケース(4 × 3 = 12)に対して実行されます。

void TestQLocale::roundTripInt()
{
    QFETCH_GLOBAL(QLocale, locale);
    QFETCH(int, number);
    bool ok;
    QCOMPARE(locale.toInt(locale.toString(number), &ok), number);
    QVERIFY(ok);
}

ロケールは QFETCH_GLOBAL() を使用してグローバルデータテーブルから読み込まれ、数値はQFETCH() を使用してローカルデータテーブルから読み込まれます。

注:この マクロは、initTestCase_data() メソッドを持つクラスのテストメソッド内でのみ使用できます。

QFINDTESTDATA(filename)

filename で参照されるテストデータファイルに対する `QString ` を返します。テストデータファイルが見つからない場合は、空の `QString ` を返します。

このマクロを使用すると、テスト内に絶対ファイル名をハードコーディングしたり、エラーの原因となりやすい相対パスを使用したりすることなく、外部ファイルからデータを読み込むことができます。

返されるパスは、以下のリストのうち、既存のファイルまたはディレクトリに解決される最初のパスとなります:

  • filename QCoreApplication::applicationDirPath() に対する相対パス( または オブジェクトが作成されている場合のみ)。QCoreApplication QApplication
  • filename テストの標準インストールディレクトリ(QLibraryInfo::TestsPath に小文字のテストケース名を付加したもの)を基準とした相対パス。
  • filename QFINDTESTDATA が呼び出されたソースファイルを含むディレクトリを基準とする。

指定されたファイル/ディレクトリがこれらの場所のいずれにも存在しない場合、テストログに警告が出力されます。

たとえば、次のコードの場合:

bool tst_MyXmlParser::parse()
{
    MyXmlParser parser;
    QString input = QFINDTESTDATA("testxml/simple1.xml");
    QVERIFY(parser.parse(input));
}

テストデータファイルは、以下の場所の中から最初に存在するファイルとして解決されます:

  • /home/user/build/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml
  • /usr/local/Qt-5.0.0/tests/tst_myxmlparser/testxml/simple1.xml
  • /home/user/sources/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml

これにより、テストがインストールされているかどうか、またテストのビルドツリーがテストのソースツリーと一致しているかどうかにかかわらず、テストは自身のテストデータを見つけることができます。

注: ソースディレクトリからのテストデータの確実な 検出には、qmake を使用するか、QT_TESTCASE_BUILDDIR マクロをコンパイラが呼び出される作業ディレクトリを指すように定義するか、あるいはコンパイラに渡されるソースファイルのパスがすべて絶対パスである必要があります。そうでない場合、ソースディレクトリの絶対パスを特定することはできません。

注: CMakeが使用され、かつQtTest モジュールがターゲットにリンクされている場合、QT_TESTCASE_BUILDDIR マクロも 暗黙的に定義されます。ターゲットでQT_TESTCASE_BUILDDIRプロパティを設定することで、デフォルトのQT_TESTCASE_BUILDDIR を変更できます。

注: QTEST_APPLESS_MAIN() マクロを使用してmain() 関数を生成するテストの場合 、QFINDTESTDATA はQCoreApplication::applicationDirPath() を基準としてテストデータを検索しようとはしません。実際には、これは、QTEST_APPLESS_MAIN() を使用するテストが、シャドウビルドツリーから実行された場合、テストデータが見つからなくなることを意味します。

QSKIP(description)

テスト関数から呼び出された場合、QSKIP() マクロは、テストログに失敗を記録することなく、テストの実行を中止します。これを使用すると、現在の設定では意味をなさないテストをスキップすることができます。たとえば、フォントのレンダリングに関するテストでは、必要なフォントがテストシステムにインストールされていない場合に QSKIP() を呼び出すことがあります。

テストログには「description 」というテキストが追加され、ここにテストが実行できなかった理由の説明を含める必要があります。

テストがデータ駆動型の場合、テスト関数内での QSKIP() の各呼び出しは、現在のテストデータ行のみをスキップするため、無条件で QSKIP() を呼び出すと、テストデータの各行ごとにテストログに 1 件のスキップメッセージが記録されます。

_data 関数から呼び出された場合、QSKIP()マクロは_data 関数の実行を停止し、関連するテスト関数の実行も阻止します。これにより、データ駆動型テストが完全に省略されます。個々の行を省略するには、テスト関数内でQSKIP()を使用する代わりに、_data 関数内で単純なif (condition) newRow(...) << ... を使用して条件分岐を設けてください。

initTestCase_data() から呼び出された場合、QSKIP()マクロはすべてのテスト関数および_data 関数をスキップします。initTestCase_data() が存在しない場合、または が1行のみを設定している場合にinitTestCase() から呼び出された場合、QSKIP()は同様にテスト全体をスキップします。 ただし、initTestCase_data() に複数の行が含まれている場合、initTestCase() は、その各行ごとに1回ずつ呼び出されます(その後に各テストが続き、最後にまとめ処理が行われます)。したがって、initTestCase() 内でQSKIP()を呼び出しても、initTestCase_data() によってセットアップされたグローバルデータの現在の行に対するすべてのテスト関数がスキップされるだけです。

注:この マクロは 、テストフレームワークによって呼び出されるテスト関数または_data 関数内でのみ使用できます。

例:

if (!QSqlDatabase::drivers().contains("SQLITE"))
    QSKIP("This test requires the SQLITE database driver");
既知のバグのスキップ

テストによって、直ちに修正されない既知のバグが判明した場合は、QEXPECT_FAIL() マクロを使用して失敗を記録し、その既知の問題のバグ追跡識別子を参照してください。 テストが実行されると、予期される失敗はテスト出力で XFAIL としてマークされ、テストプログラムの戻りコードを設定する際には失敗としてカウントされません。予期される失敗が発生しなかった場合、テスト出力に XPASS(予期せぬ合格)が報告され、テストの失敗としてカウントされます。

既知のバグについては、QEXPECT_FAIL() の方が QSKIP() よりも適しています。なぜなら、XPASS 結果によってテストの更新が必要であることを開発者に思い出させなければ、バグを修正できないからです。QSKIP() を使用した場合、テストの修正や再有効化を促すリマインダーがなく、それがないと後続の回帰不具合が報告されなくなります。

「QEXPECT_FAIL()」および「テストを除外するための適切なメカニズムの選択」も参照してください 。

QTEST(actual, testElement)

QTEST() は、QCOMPARE() の利便性を高めるためのマクロであり、値actual を、テストデータの要素testElement と比較します。該当する要素が存在しない場合、テストはアサートされます。

それ以外は、QTEST() の動作はQCOMPARE() と全く同じです。

次のように記述する代わりに:

QFETCH(QString, myString);
QCOMPARE(QString("hello").toUpper(), myString);

次のように記述できます:

QTEST(QString("hello").toUpper(), "myString");

QCOMPARE()も参照してください 。

QTEST_APPLESS_MAIN(TestClass)

TestClass 内のすべてのテストを実行する main() 関数を実装します。

QTEST_MAIN() と同様に動作しますが、QApplication オブジェクトはインスタンス化されません。非常に単純な、GUI を使用しないスタンドアロンのテストには、このマクロを使用してください。

QTEST_MAIN()も参照してください 。

QTEST_GUILESS_MAIN(TestClass)

QCoreApplication オブジェクトとTestClass をインスタンス化し、定義された順序ですべてのテストを実行するmain()関数を実装します。このマクロを使用して、スタンドアロンの実行ファイルをビルドします。

QTEST_MAIN() と同様に動作しますが、QApplication オブジェクトの代わりにQCoreApplication をインスタンス化します。テストケースでQApplication が提供する機能は必要ないものの、イベントループは依然として必要な場合に、このマクロを使用してください。

QTEST_MAIN()も参照してください 。

QTEST_MAIN(TestClass)

アプリケーションオブジェクトとTestClass をインスタンス化し、定義された順序ですべてのテストを実行するmain()関数を実装します。このマクロを使用して、スタンドアロンの実行可能ファイルをビルドします。

QT_WIDGETS_LIB が定義されている場合、アプリケーションオブジェクトはQApplication となり、QT_GUI_LIB が定義されている場合はQGuiApplication となり、それ以外の場合はQCoreApplication となります。qmakeを使用しており、設定にQT += widgets が含まれている場合、QT_WIDGETS_LIB が自動的に定義されます。同様に、qmakeを使用しており、設定にQT += gui が含まれている場合、QT_GUI_LIB が自動的に定義されます。

例:

QTEST_MAIN(TestQString)

QTEST_APPLESS_MAIN()、QTEST_GUILESS_MAIN()、およびQTest::qExec()も参照してください 。

[since 6.8] QTEST_THROW_ON_FAIL

定義されると、QCOMPARE() やQVERIFY() などは、失敗した際に常に例外をスローします。QTest::setThrowOnFail() は、その場合、もはや何の効果も持ちません。

このマクロを定義すると、戻り値の型がvoid ではない関数内でQCOMPARE() やQVERIFY() を使用したい場合に役立ちます。 このマクロが定義されていない場合、例えば `QCOMPARE()` は、return; を含む文に展開されるため、void 以外の値を返す関数(またはラムダ式)では使用できません。例:QString 。これには、実行時のみ例外のスローが有効になっている場合(QTest::setThrowOnFail(true) を使用)も含まれます。 このマクロを定義すると、QCOMPARE() は、return; を持たない文に展開されるため、どの関数からでも使用可能になります。

このマクロは Qt 6.8 で導入されました。

[since 6.8] QTEST_THROW_ON_SKIP

QSKIP() を定義すると、常に例外がスローされます。その結果、QTest::setThrowOnSkip() はもはや何の効果も持ちません。

このマクロを定義すると、戻り値の型が `void ` ではない関数内で `QSKIP()` を使用したい場合に便利です。 このマクロが定義されていない場合、例えば `QSKIP()` は、return; を含む文に展開されるため、void 以外の値を返す関数(またはラムダ式)では使用できません。例:QString 。これには、実行時のみ例外のスローが有効になっている場合(QTest::setThrowOnSkip(true) を使用)も含まれます。 このマクロを定義すると、QSKIP() は、return; を持たない文に展開されるため、どの関数からでも使用可能になります。

このマクロは Qt 6.8 で導入されました。

QTRY_COMPARE(actual, expected)

QTRY_COMPARE_WITH_TIMEOUT() をタイムアウト 5 秒で呼び出し、actual とexpected の値を比較します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

関連項目: QTRY_COMPARE_WITH_TIMEOUT()、QCOMPARE()、QVERIFY()、QTRY_VERIFY()、およびQEXPECT_FAIL()。

[since 6.4] QTRY_COMPARE_EQ(computed, baseline)

タイムアウトを5秒に設定してQTRY_COMPARE_EQ_WITH_TIMEOUT を呼び出し、computed とbaseline の値を比較します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_EQ() およびQTRY_COMPARE_EQ_WITH_TIMEOUT()も参照してください 。

[since 6.4] QTRY_COMPARE_EQ_WITH_TIMEOUT(computed, baseline, timeout)

このマクロはQCOMPARE_EQ()と似ていますが、computed とbaseline の値の比較を、比較の結果がtrue となるか、timeout (ミリ秒単位)に達するまで繰り返し実行します。各比較の合間に、イベントが処理されます。タイムアウトに達した場合、テストログに失敗が記録され、テストはそれ以上実行されません。

Qt 6.8 以降では、timeout として、2s のようなstd::chrono リテラルも指定可能です。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_EQ() およびQTRY_COMPARE_EQ()も参照してください 。

[since 6.4] QTRY_COMPARE_GE(computed, baseline)

タイムアウトを5秒に設定してQTRY_COMPARE_GE_WITH_TIMEOUT を呼び出し、computed とbaseline の値を比較します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_GE() およびQTRY_COMPARE_GE_WITH_TIMEOUT()も参照してください 。

[since 6.4] QTRY_COMPARE_GE_WITH_TIMEOUT(computed, baseline, timeout)

このマクロは `QCOMPARE_GE()` と似ていますが、`computed ` と `baseline ` の値の比較を、比較の結果が `true ` となるか、timeout (ミリ秒単位)に達するまで繰り返し実行します。各比較の合間に、イベントが処理されます。タイムアウトに達した場合、テストログに失敗が記録され、テストはそれ以上実行されません。

Qt 6.8 以降、timeout には、2s のようなstd::chrono リテラルも指定できるようになりました。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_GE() およびQTRY_COMPARE_GE()も参照してください 。

[since 6.4] QTRY_COMPARE_GT(computed, baseline)

タイムアウトを5秒に設定してQTRY_COMPARE_GT_WITH_TIMEOUT を呼び出し、computed とbaseline の値を比較します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_GT() およびQTRY_COMPARE_GT_WITH_TIMEOUT()も参照してください 。

[since 6.4] QTRY_COMPARE_GT_WITH_TIMEOUT(computed, baseline, timeout)

このマクロは `QCOMPARE_GT()` と似ていますが、`computed ` と `baseline ` の値の比較を、比較の結果が `true ` となるか、`timeout `(ミリ秒単位)に達するまで繰り返し実行します。各比較の合間に、イベントが処理されます。タイムアウトに達した場合、テストログに失敗が記録され、テストはそれ以上実行されません。

Qt 6.8 以降では、timeout として、2s のようなstd::chrono リテラルも指定できるようになりました。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_GT() およびQTRY_COMPARE_GT()も参照してください 。

[since 6.4] QTRY_COMPARE_LE(computed, baseline)

タイムアウトを5秒に設定してQTRY_COMPARE_LE_WITH_TIMEOUT を呼び出し、computed とbaseline の値を比較します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_LE() およびQTRY_COMPARE_LE_WITH_TIMEOUT()も参照してください 。

[since 6.4] QTRY_COMPARE_LE_WITH_TIMEOUT(computed, baseline, timeout)

このマクロは `QCOMPARE_LE()` と似ていますが、`computed ` と `baseline ` の値の比較を、比較の結果が `true ` となるか、timeout (ミリ秒単位)に達するまで繰り返し実行します。各比較の合間に、イベントが処理されます。タイムアウトに達した場合、テストログに失敗が記録され、テストはそれ以上実行されません。

Qt 6.8 以降では、timeout として、2s のようなstd::chrono リテラルも指定できるようになりました。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_LE() およびQTRY_COMPARE_LE()も参照してください 。

[since 6.4] QTRY_COMPARE_LT(computed, baseline)

タイムアウトを5秒に設定してQTRY_COMPARE_LT_WITH_TIMEOUT を呼び出し、computed とbaseline の値を比較します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_LT() およびQTRY_COMPARE_LT_WITH_TIMEOUT()も参照してください 。

[since 6.4] QTRY_COMPARE_LT_WITH_TIMEOUT(computed, baseline, timeout)

このマクロは `QCOMPARE_LT()` と似ていますが、`computed ` と `baseline ` の値の比較を、比較の結果が `true ` となるか、timeout (ミリ秒単位)に達するまで繰り返し実行します。各比較の合間に、イベントが処理されます。タイムアウトに達した場合、テストログに失敗が記録され、テストはそれ以上実行されません。

Qt 6.8 以降、timeout には、2s のようなstd::chrono リテラルも指定できるようになりました。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_LT() およびQTRY_COMPARE_LT()も参照してください 。

[since 6.4] QTRY_COMPARE_NE(computed, baseline)

タイムアウトを5秒に設定してQTRY_COMPARE_NE_WITH_TIMEOUT を呼び出し、computed とbaseline の値を比較します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_NE() およびQTRY_COMPARE_NE_WITH_TIMEOUT()も参照してください 。

[since 6.4] QTRY_COMPARE_NE_WITH_TIMEOUT(computed, baseline, timeout)

このマクロは `QCOMPARE_NE()` と似ていますが、`computed ` と `baseline ` の値の比較を、比較の結果が `true ` となるか、timeout (ミリ秒単位)に達するまで繰り返し実行します。各比較の合間に、イベントが処理されます。タイムアウトに達した場合、テストログに失敗が記録され、テストはそれ以上実行されません。

Qt 6.8 以降では、timeout として、2s のようなstd::chrono リテラルも指定できるようになりました。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.4 で導入されました。

QCOMPARE_NE() およびQTRY_COMPARE_NE()も参照してください 。

QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

QTRY_COMPARE_WITH_TIMEOUT() マクロは、QCOMPARE() と似ていますが、actual とexpected の値の比較を、2つの値が等しくなるか、timeout (ミリ秒単位)に達するまで繰り返し実行します。 各比較の合間に、イベントが処理されます。タイムアウトに達した場合、テストログに失敗が記録され、テストはそれ以上実行されません。

Qt 6.8 以降では、timeout として、2s のようなstd::chrono リテラルも指定可能です。

注: この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

関連項目: ` QTRY_COMPARE()`、`QCOMPARE()`、`QVERIFY()`、`QTRY_VERIFY()`、および `QEXPECT_FAIL()`。

QTRY_VERIFY2(condition, message)

タイムアウトを5秒に設定してQTRY_VERIFY2_WITH_TIMEOUT()を呼び出し、condition を確認します。その後もcondition がfalseのままである場合、message が出力されます。message はプレーンなC文字列です。

例:

QTRY_VERIFY2(list.size() > 2, QByteArray::number(list.size()).constData());

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

関連項目: QTRY_VERIFY2_WITH_TIMEOUT()、QTRY_VERIFY()、QVERIFY()、QCOMPARE()、QTRY_COMPARE()、およびQEXPECT_FAIL()。

QTRY_VERIFY(condition)

タイムアウトを5秒に設定してQTRY_VERIFY_WITH_TIMEOUT()を呼び出し、condition を確認します。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

関連項目: QTRY_VERIFY_WITH_TIMEOUT()、QTRY_VERIFY2()、QVERIFY()、QCOMPARE()、QTRY_COMPARE()、およびQEXPECT_FAIL()。

QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)

QTRY_VERIFY2_WITH_TIMEOUT マクロは、QTRY_VERIFY_WITH_TIMEOUT() と似ていますが、指定されたtimeout (ミリ秒単位)経過後もcondition が依然としてfalseである場合に、詳細なmessage を出力するという点が異なります。message は、プレーンなC文字列です。

Qt 6.8 以降、timeout には、2s のようなstd::chrono リテラルを指定することもできます。

例:

QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData(), 10s);

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

関連項目: QTRY_VERIFY()、QTRY_VERIFY_WITH_TIMEOUT()、QVERIFY()、QCOMPARE()、QTRY_COMPARE()、およびQEXPECT_FAIL()。

QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)

QTRY_VERIFY_WITH_TIMEOUT() マクロは、QVERIFY() と似ていますが、条件が真になるか、timeout (ミリ秒単位)に達するまで、condition を繰り返しチェックします。 各評価の合間に、イベントが処理されます。タイムアウトに達した場合、テストログに失敗が記録され、テストはそれ以上実行されません。

Qt 6.8 以降では、timeout として2s のようなstd::chrono リテラルを指定することも可能です。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

関連項目: QTRY_VERIFY()、QTRY_VERIFY2_WITH_TIMEOUT()、QVERIFY()、QCOMPARE()、QTRY_COMPARE()、およびQEXPECT_FAIL()。

QVERIFY2(condition, message)

QVERIFY2() マクロは、QVERIFY() とまったく同じように動作しますが、condition が false の場合にmessage を返す点が異なります。message は、プレーンな C 文字列です。

このメッセージは、QString にqPrintable() を適用するなど、プレーンな C 文字列を生成する関数呼び出しからも取得できます。 は、.args() を適用してデータをフォーマットするなど、通常の方法のいずれかで作成可能です。

例:

QVERIFY2(QFileInfo("file.txt").exists(), "file.txt does not exist.");

たとえば、ファイルオブジェクトがあり、そのopen() 関数をテストする場合、次のような文を含むテストを記述することができます:

bool opened = file.open(QIODevice::WriteOnly);
QVERIFY(opened);

このテストが失敗した場合、ファイルが開けなかった理由について何の手がかりも得られません:

FAIL! : tst_QFile::open_write() 'opened' returned FALSE. ()

テスト対象の値から、より詳しいエラーメッセージを作成できる場合は、QVERIFY2() を使用して、そのメッセージをテスト条件とともに渡すことで、失敗時により詳しいメッセージを表示させることができます:

QVERIFY2(file.open(QIODevice::WriteOnly),
         qPrintable(QString("open %1: %2")
                   .arg(file.fileName()).arg(file.errorString())));

このブランチが Qt CI システムでテストされている場合、上記の詳細な失敗メッセージが、コードレビューシステムに投稿されるサマリーに挿入されます:

FAIL! : tst_QFile::open_write() 'opened' returned FALSE. (open /tmp/qt.a3B42Cd: No space left on device)

関連項目: QVERIFY(),QCOMPARE(),QEXPECT_FAIL(),QCOMPARE_EQ(),QCOMPARE_NE(),QCOMPARE_LT(),QCOMPARE_LE(),QCOMPARE_GT(), およびQCOMPARE_GE()。

QVERIFY(condition)

QVERIFY() マクロは、condition が真であるかどうかを検証します。真の場合、実行は続行されます。そうでない場合、テストログに失敗が記録され、テストはそれ以上実行されません。

QVERIFY2() は、テスト失敗レポートに追加情報を記載することが実用的かつ有益な場合に使用できます。

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

たとえば、次のコードは、QSignalSpy オブジェクトが有効であるかどうかを検証するためにこのマクロを使用している例です。

QVERIFY(spy.isValid());

失敗に関する詳細情報を取得するには、QVERIFY(x == y) の代わりにQCOMPARE(x, y) を使用してください。比較に失敗した場合、 は期待値と実際の値の両方を報告します。

関連項目: QCOMPARE()、QTRY_VERIFY()、QSignalSpy 、QEXPECT_FAIL()、QCOMPARE_EQ()、QCOMPARE_NE()、QCOMPARE_LT()、QCOMPARE_LE()、QCOMPARE_GT()、およびQCOMPARE_GE()。

[since 6.3] QVERIFY_THROWS_EXCEPTION(exceptiontype, ...)

QVERIFY_THROWS_EXCEPTION マクロは、可変引数で指定された式を実行し、その式からスローされる例外をキャッチすることを想定しています。

以下のようないくつかの結果が考えられます:

  • 式が、exceptiontype と同じ、またはexceptiontype から派生した例外をスローした場合、実行は継続されます。
  • それ以外の場合、つまり式が例外をスローしないか、スローされた例外が `std::exception` から派生している場合は、テストログに失敗が記録され、マクロは(囲んでいる関数から)早期に返ります。
  • スローされた例外がstd::exception にもexceptiontype にも派生していない場合、テストログに失敗が記録され、その例外が再スローされます。これにより、例えば pthread のキャンセル例外による問題を回避できます。

このマクロは可変引数を使用するため、式には、プリプロセッサが引数の区切り文字とみなすコンマを含めることができます。例えば、次のようにです。

QVERIFY_THROWS_EXCEPTION(std::bad_alloc,
// macro arguments:      ^ exceptiontype
                         std::vector<std::pair<int, long>>{42'000'000'000, {42, 42L}});
// macro arguments:      \---------- 1 ----------/  \-------- 2 --------/  \3/  \ 4 /
//                       \----------------------- expression -----------------------/

注:この マクロは、テストフレームワークによって呼び出されるテスト関数内でのみ使用できます。

このマクロは Qt 6.3 で導入されました。

[since 6.3] QVERIFY_THROWS_NO_EXCEPTION(...)

QVERIFY_THROWS_NO_EXCEPTION マクロは、可変引数として指定された式を実行し、その式からスローされる例外をすべてキャッチしようとします。

その結果にはいくつかのケースがあります:

  • 式が例外をスローしない場合、実行は継続されます。
  • それ以外の場合、std::exception から派生した例外がキャッチされると、テストログに失敗が記録され、マクロは早期に終了します(外側の関数からの暗黙的な戻り)。
  • std::exception から派生していない例外がキャッチされた場合、テストログに失敗が記録され、その例外は再スローされます。これにより、例えば pthread キャンセル例外などの問題が発生するのを回避できます。

このマクロは可変引数を使用するため、式にはプリプロセッサが引数の区切り文字とみなすコンマを含めることができます。例えば、次のような場合です。

QVERIFY_THROWS_NO_EXCEPTION(std::pair<int, long>{42, 42L});
// macro arguments:         \---- 1 ----/  \-- 2 -/  \3 /

注:この マクロは、テストフレームワークによって呼び出されるテスト関数でのみ使用できます。

このマクロは Qt 6.3 で導入されました。

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