QTest Namespace
QTest 名前空間には、Qtテストに関連するすべての関数と宣言が含まれています。
Header: | #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(actual, expected) | |
(since 6.4) | QCOMPARE_EQ(computed, baseline) |
(since 6.4) | QCOMPARE_GE(computed, baseline) |
(since 6.4) | QCOMPARE_GT(computed, baseline) |
(since 6.4) | QCOMPARE_LE(computed, baseline) |
(since 6.4) | QCOMPARE_LT(computed, baseline) |
(since 6.4) | QCOMPARE_NE(computed, baseline) |
QEXPECT_FAIL(dataIndex, comment, mode) | |
QFAIL(message) | |
QFETCH(type, name) | |
QFETCH_GLOBAL(type, name) | |
QFINDTESTDATA(filename) | |
QSKIP(description) | |
QTEST(actual, testElement) | |
QTEST_APPLESS_MAIN(TestClass) | |
QTEST_GUILESS_MAIN(TestClass) | |
QTEST_MAIN(TestClass) | |
QTRY_COMPARE(actual, expected) | |
(since 6.4) | QTRY_COMPARE_EQ(computed, baseline) |
(since 6.4) | QTRY_COMPARE_EQ_WITH_TIMEOUT(computed, baseline, timeout) |
(since 6.4) | QTRY_COMPARE_GE(computed, baseline) |
(since 6.4) | QTRY_COMPARE_GE_WITH_TIMEOUT(computed, baseline, timeout) |
(since 6.4) | QTRY_COMPARE_GT(computed, baseline) |
(since 6.4) | QTRY_COMPARE_GT_WITH_TIMEOUT(computed, baseline, timeout) |
(since 6.4) | QTRY_COMPARE_LE(computed, baseline) |
(since 6.4) | QTRY_COMPARE_LE_WITH_TIMEOUT(computed, baseline, timeout) |
(since 6.4) | QTRY_COMPARE_LT(computed, baseline) |
(since 6.4) | QTRY_COMPARE_LT_WITH_TIMEOUT(computed, baseline, timeout) |
(since 6.4) | QTRY_COMPARE_NE(computed, baseline) |
(since 6.4) | QTRY_COMPARE_NE_WITH_TIMEOUT(computed, baseline, timeout) |
QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout) | |
QTRY_VERIFY2(condition, message) | |
QTRY_VERIFY(condition) | |
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout) | |
QTRY_VERIFY_WITH_TIMEOUT(condition, timeout) | |
QVERIFY2(condition, message) | |
QVERIFY(condition) | |
(since 6.3) | QVERIFY_THROWS_EXCEPTION(exceptiontype, ...) |
(since 6.3) | QVERIFY_THROWS_NO_EXCEPTION(...) |
詳しい説明
ユニットテストの書き方についてはQtテストの概要を参照してください。
クラス
クラス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;
カスタム型を testdata に追加するには、Q_DECLARE_METATYPE() を使用して、QMetaType に型を登録する必要があります。
注意: この関数は、テストフレームワークから呼び出されるテストのデータ関数の一部としてのみ使用できます。
より詳細な例についてはデータ駆動型テストを参照ください。
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
を返します。
これは、テストが失敗したかスキップを実行した場合に適用されます。これが true の場合、テスト関数は早めに返す必要があります。特に、QTRY_*
マクロとテスト・イベント・ループは、テスト関数中に実行された場合、そのループを早期に終了させます(ただし、cleanup()は実行しません)。テストがこのモジュールのマクロを使用するヘルパー関数を呼び出した後、この関数を使用して早く戻るかどうかをテストすることができます。
この関数は Qt 6.5 で導入されました。
QTest::currentTestFailed()も参照してください 。
[since 6.3]
void QTest::failOnWarning(const QRegularExpression &messagePattern)
messagePattern にマッチする警告ごとに、テストの失敗をテストログに追加します。
失敗が追加されると、テスト関数は実行を継続します。代わりにテストを中断するには、currentTestFailed() をチェックし、true
であれば早めにリターンします。
各警告について、最初にマッチしたパターンが失敗となり、残りのパターンは無視される。
すべてのパターンは、各テスト関数の最後でクリアされます。
void FileTest::loadFiles() { QTest::failOnWarning(QRegularExpression("^Failed to load")); // Each of these will cause a test failure: 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)
key modifier widget 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)
これはオーバーロードされた関数です。
key modifier window 。 が0より大きい場合、テストはキーをクリックする前に ミリ秒待ちます。delay 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)
これはオーバーロードされた関数です。
key modifier window 。 が 0 より大きい場合、テストはキーをクリックする前に ミリ秒待つ。delay 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 で、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)
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)
これはオーバーロードされた関数です。
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)
これはオーバーロードされた関数である。
key modifier window 。 が0より大きい場合、テストはキーを解放する前に ミリ秒待つ。delay 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)
これはオーバーロードされた関数です。
keySequence からwindow へのタイピングをシミュレートする。
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 を、window のオプションのstateKey 修飾子で指定します。 クリックの位置は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 という名前を使用して、このテストデータで実行されたテストを識別します。
データ・ストリームに使用できる 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)
widget がtimeout ミリ秒以内にアクティブになればtrue
を返します。そうでない場合はfalse
を返す。
このメソッドは、QWidget::show() を呼び出し、処理を進める前にウィジェットが実際にアクティブである (すなわち、表示されていてフォーカスがある) ことに依存するテストで有用です。
注意 : 別のウィンドウによってwidget がアクティブにならない場合、このメソッドはタイムアウトしてfalse
を返します。
注意 : フォーカスは排他的なプロパティであるため、widget は、メソッドがtrue
を返した後でも、いつでも他のウィンドウにフォーカスを奪われる可能性があります。
qWaitForWindowExposed() およびQWidget::isActiveWindow()も参照 。
bool QTest::qWaitForWindowActive(QWindow *window, int timeout = 5000)
window がtimeout ミリ秒以内にアクティブになった場合は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 関数のデータタグになります。この関数は、各テスト関数の中で一度だけ呼び出すことができます。
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)
QSKIP() のスローを有効 (enable =true
) または無効 ( enable =false
) にします (直前の関数コンテキストから戻るだけではありません)。
この機能は参照カウントされます:この関数を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)
これはオーバーロードされた関数です。
size ポリシー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)
これはオーバーロードされた関数です。
ポリシーのテキスト表現を返す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 のテキスト表現を返します。
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 マクロは、コードブロックを 1 回だけ実行してその性能を測定する。
このマクロは、テスト内のコードのパフォーマンスを測定するために使用します。ベンチマークの対象となるコードは、このマクロに続くコードブロック内に含まれます。
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)
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; }
テストデータには、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 によって参照されたテストデータファイルの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)); }
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 ExcludeTestsも参照のこと 。
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)
QTRY_VERIFY2_WITH_TIMEOUT() を 5 秒のタイムアウトで起動し、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 がまだ 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() と似ていますが、condition を、条件が真になるか、timeout (ミリ秒単位)に達するまで、繰り返しチェックします。各評価の間に、イベントが処理される。タイムアウトに達すると、テストログに失敗が記録され、テストはそれ以上実行されません。
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 で導入されました。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。