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 |
(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 } |
関数
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() |
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(std::chrono::seconds{5})) |
bool | qWaitFor(Functor predicate, int timeout) |
bool | qWaitForWindowActive(QWidget *widget, int timeout = 5000) |
bool | qWaitForWindowActive(QWindow *window, int timeout = 5000) |
bool | qWaitForWindowExposed(QWidget *widget, int timeout = 5000) |
bool | qWaitForWindowExposed(QWindow *window, int timeout = 5000) |
(since 6.7) bool | qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout = std::chrono::seconds{5}) |
(since 6.7) bool | qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout = std::chrono::seconds{5}) |
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(QSizePolicy sp) |
char * | toString(const T &value) |
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) |
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) |
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.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(説明) | |
QTEST(actual,testElement) | |
QTEST_APPLESS_MAIN(TestClass) | |
QTEST_GUILESS_MAIN(テストクラス) | |
QTEST_MAIN(テストクラス) | |
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 概要を参照。
クラス
クラスQTouchEventSequence
QTouchEventSequenceクラスは、タッチイベントのシーケンスをシミュレートするために使用されます。詳細は...
クラスThrowOnFailDisabler
クラスThrowOnFailEnabler
クラスThrowOnSkipDisabler
クラスThrowOnSkipEnabler
型ドキュメント
enum QTest::KeyAction
この列挙型は、キー操作で可能なアクションを記述する。
定数 | 値 | 説明 |
---|---|---|
QTest::Press | 0 | キーが押された。 |
QTest::Release | 1 | キーが離された。 |
QTest::Click | 2 | キーがクリックされた(押されて離された)。 |
QTest::Shortcut | 3 | ショートカットがアクティブになった。この値はQt 5.6で追加されました。 |
enum QTest::MouseAction
この列挙型は、マウス操作で可能なアクションを記述します。
定数 | 値 | 説明 |
---|---|---|
QTest::MousePress | 0 | マウスボタンが押された。 |
QTest::MouseRelease | 1 | マウスボタンが離された |
QTest::MouseClick | 2 | マウスボタンがクリックされた(押されて離された) |
QTest::MouseDClick | 3 | マウスボタンがダブルクリックされた(2回押されて離された)。 |
QTest::MouseMove | 4 | マウスポインタが移動した。 |
enum QTest::QBenchmarkMetric
この列挙型は、ベンチマークが可能なすべてのものをリストします。
定数 | 値 | 説明 |
---|---|---|
QTest::FramesPerSecond | 0 | フレーム/秒 |
QTest::BitsPerSecond | 1 | ビット/秒 |
QTest::BytesPerSecond | 2 | バイト/秒 |
QTest::WalltimeMilliseconds | 3 | クロック時間(ミリ秒 |
QTest::WalltimeNanoseconds | 7 | クロック時間(ナノ秒 |
QTest::BytesAllocated | 8 | メモリ使用量(バイト |
QTest::Events | 6 | イベント・カウント |
QTest::CPUTicks | 4 | CPU時間 |
QTest::CPUMigrations | 9 | CPU間のプロセス移行 |
QTest::CPUCycles | 10 | CPUサイクル |
QTest::RefCPUCycles | 30 | リファレンスCPUサイクル |
QTest::BusCycles | 11 | バスサイクル |
QTest::StalledCycles | 12 | サイクル停止 |
QTest::InstructionReads | 5 | 命令リード |
QTest::Instructions | 13 | 命令実行 |
QTest::BranchInstructions | 14 | 分岐型命令 |
QTest::BranchMisses | 15 | 予測を誤った分岐命令 |
QTest::CacheReferences | 16 | あらゆる種類のキャッシュアクセス |
QTest::CacheMisses | 20 | キャッシュミス |
QTest::CacheReads | 17 | キャッシュリード/ロード |
QTest::CacheReadMisses | 21 | キャッシュリード/ロードミス |
QTest::CacheWrites | 18 | キャッシュの書き込み/保存 |
QTest::CacheWriteMisses | 22 | キャッシュ書き込み/保存ミス |
QTest::CachePrefetches | 19 | キャッシュプリフェッチ |
QTest::CachePrefetchMisses | 23 | キャッシュプリフェッチミス |
QTest::ContextSwitches | 24 | コンテキストスイッチ |
QTest::PageFaults | 25 | あらゆるタイプのページフォルト |
QTest::MinorPageFaults | 26 | マイナーページフォルト |
QTest::MajorPageFaults | 27 | メジャーページフォルト |
QTest::AlignmentFaults | 28 | ミスアライメントによるフォールト |
QTest::EmulationFaults | 29 | ソフトウェア・エミュレーションが必要なフォールト |
WalltimeNanoseconds
とBytesAllocated
は、setBenchmarkResult()を介してのみ使用できるように提供されており、これらのメトリクスの結果は、QTest フレームワークでは自動的に提供できないことに注意。
QTest::benchmarkMetricName() およびQTest::benchmarkMetricUnit()も参照のこと 。
enum QTest::TestFailMode
この列挙型は、QVERIFY()やQCOMPARE()マクロなどによるチェックで、失敗することが分かっている場合の処理モードを記述する。このモードは、チェックの失敗・成功に関係なく適用されます。
定数 | 値 | 説明 |
---|---|---|
QTest::Abort | 1 | テストの実行を中止します。問題のあるチェックの後、それ以上テストを実行する意味がない場合にこのモードを使用します。 |
QTest::Continue | 2 | 問題のあるチェックの後、テストの実行を継続します。 |
QEXPECT_FAIL()も参照 。
関数 ドキュメント
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, ...)
現在のテストデータに新しい行を追加します。
この関数の引数は std::snprintf() に渡され、format に従ってフォーマットされます。 注意点や制限事項については、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 ウィンドウ・システム・インターフェースに登録されます。通常、createTouchDevice() を使ってテストケース・クラスのメンバ変数QPointingDevice を初期化し、すべてのテストで同じインスタンスを使い、不要になったら削除します。
QTest::QTouchEventSequence とtouchEvent()も参照してください 。
const char *QTest::currentAppName()
現在実行されているバイナリの名前を返します。
const char *QTest::currentDataTag()
現在のテストデータの名前を返します。テストにテストデータが割り当てられていない場合、この関数はnullptr
を返します。
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
を返します。
これは、テストが失敗した場合やスキップした場合に適用されます。真である場合、テスト関数は早期に戻る必要があります。特に、QTRY_*
マクロとテスト・イベント・ループは、テスト関数中に実行された場合、そのループを早期に終了させます(ただし cleanup() は実行しません)。テストがこのモジュールのマクロを使用するヘルパー関数を呼び出した後、この関数を使用して早く戻るかどうかをテストすることができます。
この関数は Qt 6.5 で導入されました。
QTest::currentTestFailed()も参照してください 。
[since 6.3]
void QTest::failOnWarning(const QRegularExpression &messagePattern)
messagePattern に一致する警告ごとに、テストの失敗をテストログに追加する。
失敗が追加されると、テスト関数は実行を続行します。代わりにテストを中止するには、currentTestFailed() をチェックし、true
であれば早めにリターンします。
各警告について、最初にマッチしたパターンが失敗の原因となり、残りのパターンは無視されます。
すべてのパターンは、各テスト関数の最後でクリアされます。
voidFileTest::loadFiles() {QTest::failOnWarning(QRegularExpression("^Failed to load"));// それぞれテストに失敗します: 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()
この関数は failOnWarning() をオーバーロードしたものです。
警告が出力された場合、テストの失敗をテストログに追加します。
この関数は Qt 6.8 で導入されました。
failOnWarning()も参照してください 。
[since 6.3]
void QTest::failOnWarning(const char *message)
この関数は failOnWarning() をオーバーロードしたものです。
message が出力された場合、テストの失敗をテストログに追加します。
この関数は 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() が無効なファイル名で実行された場合に正しい警告を出力することをテストしています。
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番目の例は、shift-escape
をクリックした後、myWidget
を200ミリ秒遅延させたものである。
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番目の例は、shift-escape
をクリックした後、myWindow
を200ミリ秒遅延させたものである。
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)
sequence widget 。オプションで、キーボード 、各キーをクリックする前のテストの (ミリ秒単位)を指定できる。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 で、Qt のキーイベントをwidget に送信します。オプションで、キーボードmodifier と、イベント送信前のテストdelay (ミリ秒単位) を指定できます。
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
これはオーバーロードされた関数です。
与えられたキーascii と関連するaction で、Qt のキーイベントをwidget に送信します。オプションで、キーボードmodifier と、イベント送信前のテストdelay (ミリ秒単位) を指定できます。
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
これはオーバーロードされた関数です。
与えられたkey と関連するaction で、Qt のキーイベントをwindow に送信します。オプションで、キーボードmodifier と、イベント送信前のテストdelay (ミリ秒単位) を指定できます。
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
これはオーバーロードされた関数です。
与えられたキーascii と関連するaction で、Qt のキーイベントをwindow に送信します。オプションで、キーボードmodifier と、イベント送信前のテストdelay (ミリ秒単位) を指定できます。
void QTest::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
key modifier widget 。 が0より大きい場合、このテストはキーを押す前に ミリ秒待つ。delay delay
注意: ある時点で、keyRelease ()を使ってキーを離す必要がある。
QTest::keyRelease() およびQTest::keyClick()も参照の こと。
void QTest::keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
これはオーバーロードされた関数である。
key modifier widget 。 が 0 より大きい場合、キーを押す前に ミリ秒待つ。delay delay
注意: ある時点で、keyRelease ()を使ってキーを離す必要がある。
QTest::keyRelease() およびQTest::keyClick()も参照の こと。
void QTest::keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
これはオーバーロードされた関数である。
key modifier window 。 が 0 より大きい場合、キーを押す前に ミリ秒待つ。delay delay
注意: ある時点で、keyRelease ()を使ってキーを離す必要がある。
QTest::keyRelease() およびQTest::keyClick()も参照の こと。
void QTest::keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
これはオーバーロードされた関数である。
key modifier window 。 が 0 より大きい場合、キーを押す前に ミリ秒待つ。delay delay
注意: ある時点で、keyRelease ()を使ってキーを離す必要がある。
QTest::keyRelease() およびQTest::keyClick()も参照の こと。
void QTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
key modifier widget 。 が0より大きい場合、テストはキーを解放する前に ミリ秒待つ。delay 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)
button modifier widgetクリックの位置は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)
これはオーバーロードされた関数です。
button stateKey windowクリックの位置は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)
button modifier widgetクリックの位置はpos で定義される; デフォルトの位置はウィジェットの中心である。delay が指定された場合、このテストは押したり離したりする前に、指定されたミリ秒だけ待ちます。
QTest::mouseClick()も参照のこと 。
void QTest::mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
これはオーバーロードされた関数です。
マウスのダブルクリックをシミュレートするbutton を、オプションのstateKey 修飾子window で指定する。クリックの位置は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)
これはオーバーロードされた関数です。
オプションのstateKey 修飾子でwindow を指定し、マウス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)
オプションのmodifier でマウスbutton をwidget で離すことをシミュレートする。離す位置はpos で定義される; デフォルトの位置はウィジェットの中心である。delay が指定された場合、テストはボタンを離す前に指定されたミリ秒の時間待ちます。そうでない場合、デフォルトの時間(1ミリ秒)待ちますが、これはコマンドライン引数でオーバーライドできます。
注意: イベントを個別に送信してダブルクリックをテストしたい場合は、両方のマウスリリースイベントにデフォルトより大きい短い遅延を指定してください。プレス、リリース、プレス、リリースの遅延の合計は、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)
これはオーバーロードされた関数です。
オプションのstateKey 修飾子でマウスbutton をwindow で離すことをシミュレートします。離す位置はpos で定義されます; デフォルトの位置はウィンドウの中心です。delay が指定された場合、テストはボタンを離す前に指定されたミリ秒の時間待ちます。そうでない場合、デフォルトの時間(1ミリ秒)待ちますが、これはコマンドライン引数でオーバーライドできます。
注意: イベントを個別に送信してダブルクリックをテストしたい場合は、両方のマウスリリースイベントにデフォルトより大きい短い遅延を指定してください。プレス、リリース、プレス、リリースの遅延の合計は、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 Command Line Argumentsを参照のこと。
以下の例では、MyTestObject
のすべてのテストを実行します:
MyTestObject test1; QTest::qExec(&test1);
この関数は、テストに失敗しなかった場合は0を返し、1つ以上のテストに失敗した場合や処理されなかった例外があった場合は0以外の値を返す。(スキップされたテストは戻り値に影響しません)。
スタンドアロンのテスト・アプリケーションでは、便利なマクロQTEST_MAIN() を使って main() 関数を宣言し、コマンドライン引数を解析してテストを実行することで、この関数を明示的に呼び出す必要がなくなります。
この関数の戻り値は、QTEST_MAIN ()マクロを使用した場合のテスト・アプリケーションの終了コードでもあります。
スタンドアロンのテスト・アプリケーションでは、この関数を複数回呼び出すべきではありません。テスト出力のファイルへのロギングや個々のテスト関数の実行に関するコマンドライン・オプションが正しく動作しないからです。
注意: この関数はリエントラントではなく、一度に実行できるテストは 1 つだけです。qExec() を使って実行されたテストは、qExec() を使って別のテストを実行することはできず、スレッドは同時に qExec() を呼び出すことはできません。
QTest::qExec(QObject *, constQStringList &) は Unicode セーフなので、引数をmain()
の引数から取得するのではな く、プログラムで作成したのであれば、QTest::qExec( *, const &) を使用するのがよいでしょう。
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)
現在のバイナリの中央テストケース・レジストリに、エントリ関数entryFunction を持つテストname を登録します。
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 秒間待機します。
この関数は Qt 6.7 で導入されました。
QTest::qSleep() およびQSignalSpy::wait()も参照してください 。
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(std::chrono::seconds{5}))
deadline が期限切れになるか、predicate が真を返すか、どちらか先になるまで待つ。
predicate がいずれかの時点で真を返した場合は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 が真を返すまで待つ。
これは
qWaitFor(predicate, QDeadlineTimer(timeout));
bool QTest::qWaitForWindowActive(QWidget *widget, int timeout = 5000)
timeout ミリ秒以内にwidget がアクティブであればtrue
を返す。そうでない場合はfalse
を返す。
このメソッドは、QWidget::show() を呼び出し、処理を進める前にウィジェットが実際にアクティブである (すなわち、表示されていてフォーカスがある) かどうかに依存するテストで有用です。
注意 : 別のウィンドウによってwidget がアクティブにならない場合、このメソッドはタイムアウトしてfalse
を返します。
注意 : フォーカスは排他的なプロパティであるため、widget は、メソッドがtrue
を返した後でも、いつでも他のウィンドウにフォーカスを奪われる可能性があります。
qWaitForWindowExposed() およびQWidget::isActiveWindow()も参照して ください。
bool QTest::qWaitForWindowActive(QWindow *window, int timeout = 5000)
timeout ミリ秒以内にwindow がアクティブな場合はtrue
を返す。そうでない場合はfalse
を返す。
このメソッドは、QWindow::show() を呼び出し、処理を進める前にウィンドウが実際にアクティブであること(すなわち、表示されており、フォーカスがあること)に依存するテストで有用である。
注意 : 別のウィンドウによってwindow がアクティブにならない場合、このメソッドはタイムアウトしてfalse
を返します。
注意 : フォーカスは排他的なプロパティなので、window は、メソッドがtrue
を返した後でも、いつでも他のウィンドウにフォーカスを奪われる可能性があります。
qWaitForWindowExposed()、qWaitForWindowFocused()、QWindow::isActive()も参照 。
bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout = 5000)
timeout ミリ秒以内にwidget が公開された場合はtrue
を返す。そうでない場合はfalse
を返す。
このメソッドは、QWidget::show() を呼び出し、処理を進める前にウィジェットが実際に表示されていることに依存するテストで有用である。
注意: screenにマップされたウィンドウは、他のウィンドウで完全に覆われているなどの理由で、ウィンドウのクライアント領域が表示されていない場合、まだ公開されているとはみなされないかもしれない。そのような場合、このメソッドはタイムアウトしてfalse
を返す。
qWaitForWindowActive()、QWidget::isVisible()、QWindow::isExposed()も参照のこと 。
bool QTest::qWaitForWindowExposed(QWindow *window, int timeout = 5000)
timeout ミリ秒以内にwindow が公開された場合はtrue
を返す。そうでない場合はfalse
を返す。
このメソッドは、QWindow::show() を呼び出し、処理を進める前にウィンドウが実際に表示されていることに依存するテストで有用である。
注意: screenにマップされたウィンドウは、他のウィンドウで完全に覆われているなどの理由で、ウィンドウのクライアント領域が表示されていない場合、まだ公開されているとはみなされないかもしれない。そのような場合、このメソッドはタイムアウトしてfalse
を返す。
qWaitForWindowActive() およびQWindow::isExposed()も参照のこと 。
[since 6.7]
bool QTest::qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout = std::chrono::seconds{5})
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 = std::chrono::seconds{5})
window がtimeout 内のフォーカス・ウィンドウである場合はtrue
を返す。 そうでない場合はfalse
を返す。
このメソッドは、QWindow::show() を呼び出し、処理を進める前にウィンドウがフォーカスを持つこと(キーボード・イベントなどを受け取るため)に依存するテストにおいて有用である。
注意 : 他のウィンドウによってwindow がフォーカスされない場合、このメソッドはタイムアウトしてfalse
を返します。
注意: フォーカスは排他的なプロパティなので、window は、メソッドがtrue
を返した後でも、いつでも他のウィンドウにフォーカスを奪われる可能性があります。
この関数は Qt 6.7 で導入されました。
qWaitForWindowExposed()、qWaitForWindowActive()、QGuiApplication::focusWindow()も参照してください 。
void QTest::setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric)
このテスト関数のベンチマーク結果をresult に設定します。
QBENCHMARK マクロを使用せずにベンチマーク結果を報告する場合は、この関数を使用します。Qt Test が結果をどのように解釈するかを指定するにはmetric を使用します。
結果のコンテキストは、テスト関数名と_data関数のデータタグになります。この関数は各試験関数で1回だけ呼び出すことができ、それ以降呼び出すと、先に報告された結果が置き換えられます。
iterationsコマンドライン引数は、QBENCHMARKマクロのないテスト関数には効果がないことに注意してください。
[noexcept, since 6.8]
void QTest::setThrowOnFail(bool enable)
(enable =true
) または ( enable =false
)QCOMPARE()/QVERIFY() の失敗時にスローを有効化または無効化します (直前の関数コンテキストから戻るだけではありません)。
この機能は参照カウントされます:この関数をtrue
でN回呼び出すと、false
でN回呼び出す必要があります。
QTEST_THROW_ON_FAIL 環境変数が設定されていない限り、デフォルトはfalse
です。
QTEST_THROW_ON_FAIL 環境変数が設定されていない限り、デフォルトはQTEST_THROW_ON_FAIL です。
注意: この機能を使用するには、例外を有効にしてテストをコンパイルする必要があります。
この関数は Qt 6.8 で導入されました。
setThrowOnSkip()、ThrowOnFailEnabler 、ThrowOnFailDisabler 、QTEST_THROW_ON_FAILも参照してください 。
[noexcept, since 6.8]
void QTest::setThrowOnSkip(bool enable)
(enable =true
) または ( enable =false
)QSKIP() でのスローイングを有効化または無効化する ( 直後の関数コンテキストから戻るだけでなく )。
この機能は参照カウントされます:この関数をtrue
でN回呼び出した場合、開始点に戻るにはfalse
でN回呼び出す必要があります。
QTEST_THROW_ON_SKIP 環境変数が設定されていない限り、デフォルトはfalse
です。
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進数で表現された文字列へのポインタを返す。入力が長すぎると判断された場合は切り捨てられる。切り捨ては、返される文字列の末尾に省略記号で示される。呼び出し元は返されたポインタの所有権を持ち、それが後でdelete[]演算子に渡されるようにしなければならない。
length は文字列の長さである 。ba
char *toString(QSizePolicy sp)
これはオーバーロードされた関数です。
サイズポリシーのテキスト表現を返すsp 。
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):
namespace { char *toString(const MyPoint &point) { return QTest::toString("MyPoint(" + QByteArray::number(point.x()) + ", " + QByteArray::number(point.y()) + ')'); } }
QCOMPARE()も参照してください 。
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
を含む文字列を返す。
char *toString(QSizePolicy::ControlType ct)
これはオーバーロードされた関数である。
コントロール・タイプct のテキスト表現を返します。
char *toString(QSizePolicy::ControlTypes cts)
これはオーバーロードされた関数である。
コントロール・タイプのテキスト表現を返すcts 。
char *toString(QSizePolicy::Policy p)
これはオーバーロードされた関数である。
policyp のテキスト表現を返します。
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 のテキスト表現を返します。
QTest::QTouchEventWidgetSequence QTest::touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)
widget のイベントをシミュレートするために、device 用のQTouchEventSequence を生成して返します。
タッチイベントをシーケンスに追加するとき、widget は、press() や move() などの呼び出しで別のウィジェットが提供されない限り、提供された位置をスクリーン座標に変換するためにも使用される。
タッチイベントは、autoCommit が false に設定されていない限り、QTouchEventSequence のデストラクタが呼び出されたとき(つまり、返されたオブジェクトがスコープ外に出たとき)にイベントシステムにコミットされる。autoCommit が false の場合、commit() を手動で呼び出す必要がある。
createTouchDevice()を呼び出すことで、この関数で使用するテスト用タッチデバイスを作成することができる。
QTest::QTouchEventSequence QTest::touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)
window のイベントをシミュレートするために、device 用のQTouchEventSequence を生成して返す。
タッチイベントをシーケンスに追加する場合、window は、press()、 move()などの呼び出しで別のウィンドウが指定されない限り、指定された位置をスクリーン座標に変換するためにも使用される。
タッチイベントは、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 マクロは、コードブロックを一度実行することにより、そのパフォーマンスを測定するためのものである。
このマクロは、テスト内のコードの性能を測定するために使用します。ベンチマーク対象のコードは、このマクロに続くコードブロック内に含まれる。
QBENCHMARK とは異なり、含まれるコードブロックの内容は一度しか実行されない。経過時間が短すぎて選択したバックエンドで計測できない場合は、"0" と報告されます。
ベンチマークの作成と ベンチマークの書き込みも参照してください 。
QCOMPARE(actual, expected)
QCOMPARE()マクロは、等号演算子を用いてactual の値とexpected の値を比較する。actual とexpected が一致すれば、実行が続行される。一致しない場合、失敗がテストログに記録され、テスト関数は後のチェックを試みずに戻ります。
常に QCOMPARE() のパラメータ・セマンティクスを尊重してください。QCOMPARE() に渡される最初のパラメータは、常にテスト対象のコードで実際に生成される値であるべきで、 2 番目のパラメータは常に期待値であるべきです。値が一致しない場合、QCOMPARE() はActualとExpected というラベルを付けて表示します。パラメータの順番が入れ替わると、失敗したテストのデバッグが混乱したり、ゼロを期待したテストが丸め誤差で失敗したりする可能性があります。
QCOMPARE() は、比較に失敗した場合に値の内容を出力しようとします。
例
浮動小数点型(float
、double
、qfloat16
)を比較する場合、qFuzzyCompare ()は有限の値に対して使用されます。両方の値に対してqFuzzyIsNull() が真であれば、それらも等しいとみなされます。また、実際の値としての 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 []
でなければなりません。つまり、呼び出し元のコードが処理を終えると、(free()
やプレーンなdelete
ではなく)delete[]
で解放されなければなりません。
QVERIFY()、QTRY_COMPARE()、QTest::toString()、QEXPECT_FAIL()、QCOMPARE_EQ()、QCOMPARE_NE()、QCOMPARE_LT()、QCOMPARE_LE()、QCOMPARE_GT()、QCOMPARE_GE()も参照のこと 。
[since 6.4]
QCOMPARE_EQ(computed, baseline)
QCOMPARE_EQ()マクロは、等号演算子を用いて、computed がbaseline と等しいことをチェックする。それが真であれば、実行は続行される。そうでない場合、失敗がテストログに記録され、テスト関数は後のチェックを試みずに戻ります。
一般的にはQVERIFY(computed == baseline);
を呼び出すのと似ていますが、失敗した場合はcomputed とbaseline の引数式と値を報告する書式化されたエラーメッセージを表示します。
注意: このマクロは、テストフレームワークによって呼び出されるテスト関数の中でのみ使用できます。
独自のクラスでは、QTest::toString() をオーバーロードして、テストログに出力する値をフォーマットすることができます。
注意: QCOMPARE() とは異なり、このマクロはカスタム型やポインタのオーバーロードを提供しません。そのため、const char *
の 2 つの値をパラメータとして渡すとポインタの比較が行われ、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()マクロは、greater-than-or-equal-to 演算子を用いて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()マクロは、less-than-or-equal-to 演算子を用いて、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);
上記のtestfunctionは、テストデータ入力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)
フェッチマクロは、スタック上に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; }
テストデータには、aString
というQString と、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 行に 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 によって参照された testdata ファイルのQString を返し、testdata ファイルが見つからなかった場合は空の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)); }
testdata ファイルは、file.FINDTESTDATA の最初の既存ファイルとして解決されます:
/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
これにより、テストがインストールされているかどうかや、テストのビルド ツリーがテストのソース ツリーと等しいかどうかに関係なく、テストは testdata を見つけることができます。
注意: ソースディレクトリからテストデータを確実に検出するには、qmake が使用されているか、コンパイラが起動される作業ディレクトリを指すようにQT_TESTCASE_BUILDDIR
マクロが定義されているか、ソースファイルの絶対パスだけがコンパイラに渡される必要があります。そうでない場合、ソース・ディレクトリの絶対パスを決定することはできない。
注: QT_TESTCASE_BUILDDIR
マクロは、CMake が使用され、QtTest モジュールがターゲットにリンクされている場合にも暗黙的に定義されます。ターゲットの QT_TESTCASE_BUILDDIR プロパティを設定することで、デフォルトのQT_TESTCASE_BUILDDIR
を変更できます。
注意: main()
関数を生成するためにQTEST_APPLESS_MAIN() マクロを使用するテストでは、QFINDTESTDATA
はQCoreApplication::applicationDirPath() に関連するテストデータを見つけようとしません。実際には、QTEST_APPLESS_MAIN()
を使用するテストは、シャドウビルドツリーから実行するとテストデータを見つけることができません。
QSKIP(description)
テスト関数から呼び出された場合、QSKIP() マクロはテストログに失敗を追加することなくテストの実行を停止します。QSKIP() マクロを使用すると、現在の設定では意味をなさないテストをスキップすることができます。たとえば、フォントレンダリングのテストでは、必要なフォントがテストシステムにインストールされていない場合に QSKIP() を呼び出すことがあります。
description というテキストがテストログに追加され、テストが実行できなかった理由の説明が記述されます。
テストがデータ駆動型の場合、テスト関数内で QSKIP() を呼び出すたびに、テストデータの現在の行だけがスキップされるため、QSKIP() を無条件で呼び出すと、テストデータの各行に対してテストログにスキップメッセージが 1 つ生成されます。
_data
関数から呼び出された場合、QSKIP() マクロは_data
関数の実行を停止し、関連するテスト関数の実行を阻止します。これにより、データ駆動型テストが完全に省略されます。個々の行を省略するには、テスト関数で QSKIP() を使用する代わりに、_data
関数で単純なif (condition) newRow(...) << ...
を使用して条件付きにします。
initTestCase_data()
から呼び出された場合、QSKIP() マクロはすべてのテスト関数と_data
関数をスキップします。initTestCase_data()
がないときにinitTestCase()
から呼び出された場合、または 1 行しか設定されていないときに呼び出された場合、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() およびSelect Appropriate Mechanisms to Exclude Testsも参照のこと 。
QTEST(actual, testElement)
QTEST()は、QCOMPARE()の便宜マクロであり、値actual をテストのデータから要素testElement と比較する。そのような要素がない場合、テストはアサートします。
それ以外は、QTEST() はQCOMPARE() とまったく同じように動作します。
と書く代わりに
と書くことができます:
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
が自動的に定義されます。
注意: デフォルトでキーパッドナビゲーションが有効になっているプラットフォームでは、QT_WIDGETS_LIB
が定義されている場合、このマクロは強制的に無効にします。これは、自動テストを記述する際のキーイベントの使用を単純化するためです。キーパッドナビゲーションを使用するテストケースを書きたい場合は、テストケースのinitTestCase()
またはinit()
関数で、QApplication::setNavigationMode() を呼び出して、キーパッドナビゲーションを有効にしてください。
例
QTEST_MAIN(TestQString)
QTEST_APPLESS_MAIN()、QTEST_GUILESS_MAIN()、QTest::qExec()、QApplication::setNavigationMode()も参照してください 。
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)
QTRY_COMPARE_EQ_WITH_TIMEOUT をタイムアウト 5 秒で起動して、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)
QTRY_COMPARE_GE_WITH_TIMEOUT をタイムアウト 5 秒で起動して、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)
QTRY_COMPARE_GT_WITH_TIMEOUT をタイムアウト 5 秒で起動して、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)
QTRY_COMPARE_LE_WITH_TIMEOUT をタイムアウト 5 秒で起動して、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)
QTRY_COMPARE_LT_WITH_TIMEOUT をタイムアウト 5 秒で起動して、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)
QTRY_COMPARE_NE_WITH_TIMEOUT をタイムアウト 5 秒で起動して、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 がまだ偽の場合、message が出力される。message はプレーンなC文字列である。
例:
QTRY_VERIFY2(list.size() > 2, QByteArray::number(list.size()).constData());
注意: このマクロは、テストフレームワークによって呼び出されるテスト関数の中でのみ使用できます。
QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY2(),QVERIFY(),QCOMPARE(),QTRY_COMPARE(),QEXPECT_FAIL()も参照のこと 。
QTRY_VERIFY(condition)
QTRY_VERIFY_WITH_TIMEOUT() を 5 秒のタイムアウトで起動して、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 がまだ偽である場合に、冗長な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 が偽のときに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マクロはvariadic引数で与えられた式を実行し、式から投げられた例外をキャッチすることを期待します。
いくつかの可能な結果があります:
- 式が、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マクロはvariadic引数で与えられた式を実行し、式から投げられた例外をキャッチしようとします。
いくつかの異なる結果があります:
- 式が例外をスローしなければ、実行は続行される。
- そうでない場合、
std::exception
に由来する例外がキャッチされると、テストログに失敗が記録され、マクロは早期にリターンします(内包関数からの暗黙のリターン)。 std::exception
に由来しない例外が捕捉された場合、テストログに失敗が記録され、例外が再投げされます。これにより、pthread のキャンセル例外などの問題を回避できます。
このマクロは可変長引数を使用するので、式はプリプロセッサが引数の区切り文字とみなすカンマを含むことができます。
QVERIFY_THROWS_NO_EXCEPTION(std::pair<int, long>{42, 42L}); // macro arguments: \---- 1 ----/ \-- 2 -/ \3 /
注: このマクロは、テストフレームワークによって呼び出されるテスト関数の中でのみ使用できます。
このマクロは Qt 6.3 で導入されました。
© 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.