QTest Namespace
QTest 네임스페이스에는 Qt Test 과 관련된 모든 함수와 선언이 포함되어 있습니다. 더 보기...
| 헤더: | #include <QTest> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Test) target_link_libraries(mytarget PRIVATE Qt6::Test) |
| qmake: | QT += testlib |
클래스
| class | QTouchEventSequence |
| class | QTouchEventWidgetSequence |
(since 6.8) class | ThrowOnFailDisabler |
(since 6.8) class | ThrowOnFailEnabler |
(since 6.8) class | ThrowOnSkipDisabler |
(since 6.8) class | ThrowOnSkipEnabler |
형
| enum | KeyAction { Press, Release, Click, Shortcut } |
| enum | MouseAction { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove } |
| enum | QBenchmarkMetric { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, WalltimeNanoseconds, …, EmulationFaults } |
| enum | TestFailMode { Abort, Continue } |
변수
(since 6.11) std::atomic<std::chrono::milliseconds> | defaultTryTimeout |
함수
| void | addColumn(const char *name, T *dummy = 0) |
| QTestData & | addRow(const char *format, ...) |
| const char * | benchmarkMetricName(QTest::QBenchmarkMetric metric) |
| const char * | benchmarkMetricUnit(QTest::QBenchmarkMetric metric) |
| QPointingDevice * | createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen, QInputDevice::Capabilities caps = QInputDevice::Capability::Position) |
| const char * | currentAppName() |
| const char * | currentDataTag() |
(since 6.11) const char * | currentGlobalDataTag() |
| bool | currentTestFailed() |
| const char * | currentTestFunction() |
(since 6.5) bool | currentTestResolved() |
(since 6.3) void | failOnWarning(const QRegularExpression &messagePattern) |
(since 6.8) void | failOnWarning() |
(since 6.3) void | failOnWarning(const char *message) |
| void | ignoreMessage(QtMsgType type, const char *message) |
| void | ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern) |
| void | keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keySequence(QWidget *widget, const QKeySequence &keySequence) |
| void | keySequence(QWindow *window, const QKeySequence &keySequence) |
| void | mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1) |
| void | mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1) |
| void | mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| QTestData & | newRow(const char *dataTag) |
| int | qExec(QObject *testObject, int argc = 0, char **argv = nullptr) |
| int | qExec(QObject *testObject, const QStringList &arguments) |
| QSharedPointer<QTemporaryDir> | qExtractTestData(const QString &dirName) |
(since 6.5) void | qRegisterTestCase(const QString &name, QTest::TestEntryFunction entryFunction) |
(since 6.7) void | qSleep(std::chrono::milliseconds msecs) |
| void | qSleep(int ms) |
(since 6.7) void | qWait(std::chrono::milliseconds msecs) |
| void | qWait(int msecs) |
(since 6.7) bool | qWaitFor(Functor predicate, QDeadlineTimer deadline = QDeadlineTimer( defaultTryTimeout.load(std::memory_order_relaxed))) |
| bool | qWaitFor(Functor predicate, int timeout) |
(since 6.10) bool | qWaitForWindowActive(QWidget *widget, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowActive(QWindow *window, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowActive(QWidget *widget) |
(since 6.10) bool | qWaitForWindowActive(QWindow *window) |
| bool | qWaitForWindowActive(QWidget *widget, int timeout) |
| bool | qWaitForWindowActive(QWindow *window, int timeout) |
(since 6.10) bool | qWaitForWindowExposed(QWidget *widget, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowExposed(QWindow *window, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowExposed(QWidget *widget) |
(since 6.10) bool | qWaitForWindowExposed(QWindow *window) |
| bool | qWaitForWindowExposed(QWidget *widget, int timeout) |
| bool | qWaitForWindowExposed(QWindow *window, int timeout) |
(since 6.7) bool | qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout) |
(since 6.7) bool | qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowFocused(QWidget *widget) |
(since 6.10) bool | qWaitForWindowFocused(QWindow *window) |
| void | setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric) |
(since 6.8) void | setThrowOnFail(bool enable) |
(since 6.8) void | setThrowOnSkip(bool enable) |
| char * | toHexRepresentation(const char *ba, qsizetype length) |
| char * | toString(const T &value) |
| char * | toString(QSizePolicy sp) |
| char * | toString(QSizePolicy::ControlType ct) |
| char * | toString(QSizePolicy::ControlTypes cts) |
| char * | toString(QSizePolicy::Policy p) |
| char * | toString(const QByteArray &ba) |
| char * | toString(const QCborError &c) |
| char * | toString(const QChar &character) |
| char * | toString(const QDate &date) |
| char * | toString(const QDateTime &dateTime) |
(since 6.5) char * | toString(const QKeySequence &ks) |
| char * | toString(const QLatin1StringView &string) |
| char * | toString(const QPoint &point) |
| char * | toString(const QPointF &point) |
| char * | toString(const QRect &rectangle) |
| char * | toString(const QRectF &rectangle) |
| char * | toString(const QSize &size) |
| char * | toString(const QSizeF &size) |
| char * | toString(const QString &string) |
| char * | toString(const QStringView &string) |
| char * | toString(const QTime &time) |
| char * | toString(const QUrl &url) |
| char * | toString(const QUuid &uuid) |
| char * | toString(const QVariant &variant) |
| char * | toString(const QVector2D &v) |
| char * | toString(const QVector3D &v) |
| char * | toString(const QVector4D &v) |
| char * | toString(const std::pair<T1, T2> &pair) |
| char * | toString(const std::tuple<Types...> &tuple) |
| char * | toString(std::nullptr_t) |
| QTest::QTouchEventWidgetSequence | touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true) |
| QTest::QTouchEventSequence | touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true) |
(since 6.8) void | wheelEvent(QWindow *window, QPointF pos, QPoint angleDelta, QPoint pixelDelta = QPoint(0, 0), Qt::KeyboardModifiers stateKey = Qt::NoModifier, Qt::ScrollPhase phase = Qt::NoScrollPhase) |
매크로
| QBENCHMARK | |
| QBENCHMARK_ONCE | |
| QCOMPARE(실제, 예상) | |
(since 6.9) | QCOMPARE_3WAY(좌변, 우변, 순서) |
(since 6.4) | QCOMPARE_EQ(계산값, 기준값) |
(since 6.4) | QCOMPARE_GE(계산값, 기준값) |
(since 6.4) | QCOMPARE_GT(계산값, 기준값) |
(since 6.4) | QCOMPARE_LE(계산값, 기준값) |
(since 6.4) | QCOMPARE_LT(계산값, 기준값) |
(since 6.4) | QCOMPARE_NE(계산값, 기준값) |
| QEXPECT_FAIL(데이터 인덱스, 주석, 모드) | |
| QFAIL(메시지) | |
| QFETCH(유형, 이름) | |
| QFETCH_GLOBAL(유형, 이름) | |
| QFINDTESTDATA(파일명) | |
| QSKIP(설명) | |
| QTEST(실제, 테스트 요소) | |
| QTEST_APPLESS_MAIN(TestClass) | |
| QTEST_GUILESS_MAIN(TestClass) | |
| QTEST_MAIN(테스트 클래스) | |
(since 6.8) | QTEST_THROW_ON_FAIL |
(since 6.8) | QTEST_THROW_ON_SKIP |
| QTRY_COMPARE(실제값, 예상값) | |
(since 6.4) | QTRY_COMPARE_EQ(계산된 값, 기준값) |
(since 6.4) | QTRY_COMPARE_EQ_WITH_TIMEOUT(계산값, 기준값, 타임아웃) |
(since 6.4) | QTRY_COMPARE_GE(계산값, 기준값) |
(since 6.4) | QTRY_COMPARE_GE_WITH_TIMEOUT(계산값, 기준값, 타임아웃) |
(since 6.4) | QTRY_COMPARE_GT(산출, 기준치) |
(since 6.4) | QTRY_COMPARE_GT_WITH_TIMEOUT(계산된 값, 기준값, 타임아웃) |
(since 6.4) | QTRY_COMPARE_LE(계산값, 기준값) |
(since 6.4) | QTRY_COMPARE_LE_WITH_TIMEOUT(계산된 값, 기준값, 타임아웃) |
(since 6.4) | QTRY_COMPARE_LT(계산된 값, 기준값) |
(since 6.4) | QTRY_COMPARE_LT_WITH_TIMEOUT(계산된 값, 기준값, 타임아웃) |
(since 6.4) | QTRY_COMPARE_NE(계산된 값, 기준값) |
(since 6.4) | QTRY_COMPARE_NE_WITH_TIMEOUT(산출값, 기준값, 타임아웃) |
| QTRY_COMPARE_WITH_TIMEOUT(실제, 예상, 타임아웃) | |
| QTRY_VERIFY2(조건, 메시지) | |
| QTRY_VERIFY(조건) | |
| QTRY_VERIFY2_WITH_TIMEOUT(조건, 메시지, 타임아웃) | |
| QTRY_VERIFY_WITH_TIMEOUT(조건, 타임아웃) | |
| QVERIFY2(조건, 메시지) | |
| QVERIFY(조건) | |
(since 6.3) | QVERIFY_THROWS_EXCEPTION(예외 유형, ...) |
(since 6.3) | QVERIFY_THROWS_NO_EXCEPTION(...) |
상세 설명
단위 테스트 작성 방법에 대한 정보는 ‘Qt Test ’ 개요를 참조하십시오.
클래스
QTouchEventSequence 클래스
QTouchEventSequence 클래스는 일련의 터치 이벤트를 시뮬레이션하는 데 사용됩니다. 더 보기...
class QTouchEventWidgetSequence
QTouchEventWidgetSequence 클래스는 위젯에 대한 일련의 터치 이벤트를 시뮬레이션하는 데 사용됩니다. 더 보기...
클래스 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 | 마우스 버튼을 더블 클릭합니다(두 번 눌렀다 떼기). |
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()도 참조하십시오 .
변수 문서
[since 6.11] std::atomic<std::chrono::milliseconds> QTest::defaultTryTimeout
이 전역 변수는 ` QTRY_* ` 함수와 ` qWait`에서 사용하는 기본 타임아웃 값을 저장합니다.
이 변수의 가장 일반적인 사용 사례는 테스트 전체에 대한 타임아웃을 수정하는 것입니다:
using namespace std::chrono_literals;
// Since the atomic itself (defaultTryTimeout) is the only data,
// all reads and stores can be relaxed.
QTest::defaultTryTimeout.store(1s, std::memory_order_relaxed);하지만 ` QAtomicScopedValueRollback`을 사용하여 특정 범위에 대해 이 값을 설정할 수도 있습니다:
const auto timeoutRollback = QAtomicScopedValueRollback(
QTest::defaultTryTimeout, 1s, std::memory_order_relaxed);값에 접근하려면 load() 를 호출합니다:
// Since the atomic itself is all the data, all reads and stores can be relaxed.
QCOMPARE(QTest::defaultTryTimeout.load(std::memory_order_relaxed), 1s);이 변수는 Qt 6.11에서 도입되었습니다.
함수 문서
template <typename T> void QTest::addColumn(const char *name, T *dummy = 0)
현재 테스트 데이터에 ` T ` 유형의 열을 추가합니다. ` name `은 열의 이름입니다. ` dummy `은 버그가 있는 컴파일러를 위한 임시 해결책이므로 무시해도 됩니다.
이 열에 값을 채우려면 newRow()을 사용할 수 있습니다. 실제 테스트에서 데이터를 가져오려면 QFETCH()을 사용하십시오.
예시:
QTest::addColumn<int>("intval");
QTest::addColumn<QString>("str");
QTest::addColumn<double>("dbl");
QTest::newRow("row1") << 1 << "hello" << 1.5;참고: 이 함수는 테스트 프레임워크에 의해 호출되는 테스트의 데이터 함수 내에서만 사용할 수 있습니다.
더 자세한 예제는 ‘데이터 주도 테스트’를 참조하십시오.
QTest::newRow(), QFETCH(), QMetaType도 참조하십시오 .
QTestData &QTest::addRow(const char *format, ...)
현재 테스트 데이터에 새로운 행을 추가합니다.
이 함수의 인수는 format 에 따라 서식을 지정하기 위해 std::snprintf()로 전달됩니다. 주의사항 및 제한 사항에 대해서는 std::snprintf() 문서를 참조하십시오.
테스트 출력에서는 이 서식 지정 결과로 생성된 이름을 사용하여 이 테스트 데이터로 수행된 테스트 실행을 식별합니다.
테이블의 각 열에 대해 하나의 값씩 데이터를 스트리밍하는 데 사용할 수 있는 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`를 반환합니다.
[since 6.11] const char *QTest::currentGlobalDataTag()
현재 전역 테스트 데이터의 이름을 반환합니다. 테스트에 할당된 전역 테스트 데이터가 없는 경우, 이 함수는 ` nullptr`를 반환합니다.
이 함수는 Qt 6.11에서 도입되었습니다.
bool QTest::currentTestFailed()
현재 테스트 함수가 실패한 경우 ` true `를 반환하고, 그렇지 않으면 `false`를 반환합니다.
QTest::currentTestResolved()도 참조하십시오 .
const char *QTest::currentTestFunction()
현재 실행 중인 테스트 함수의 이름을 반환합니다.
예시:
void MyTestClass::cleanup()
{
if (qstrcmp(QTest::currentTestFunction(), "myDatabaseTest") == 0) {
// clean up all database connections
closeAllDatabases();
}
}[since 6.5] bool QTest::currentTestResolved()
현재 테스트 함수가 실패했거나 건너뛴 경우 ` true `를 반환합니다.
이는 테스트가 실패했거나 건너뛰기가 실행된 경우에 적용됩니다. 이 값이 true인 경우, 테스트 함수는 조기에 반환해야 합니다. 특히, QTRY_* 매크로와 테스트 이벤트 루프는 테스트 함수 실행 중(단, cleanup()은 제외)에 호출될 경우 루프를 조기에 종료합니다. 테스트가 이 모듈의 매크로를 사용하는 헬퍼 함수를 호출한 후에는, 이 함수를 사용하여 조기 반환 여부를 판단할 수 있습니다.
이 함수는 Qt 6.5에서 도입되었습니다.
QTest::currentTestFailed()도 참조하십시오 .
[since 6.3] void QTest::failOnWarning(const QRegularExpression &messagePattern)
messagePattern 에 해당하는 각 경고에 대해 테스트 로그에 테스트 실패 항목을 추가합니다.
실패 항목이 추가되어도 테스트 함수는 실행을 계속합니다. 대신 테스트를 중단하려면 currentTestFailed()를 확인하고, 결과가 true 인 경우 조기에 반환할 수 있습니다.
각 경고에 대해, 일치하는 첫 번째 패턴이 실패를 유발하며, 나머지 패턴은 무시됩니다.
각 테스트 함수가 종료되면 모든 패턴이 초기화됩니다.
void FileTest::loadFiles()
{
QTest::failOnWarning(QRegularExpression("^로드 실패"));
// 다음 각 항목은 테스트 실패를 유발합니다:
qWarning() << "Failed to load image";
qWarning() << "Failed to load video";
}주어진 경고를 유발하는 모든 테스트가 실패하도록 하려면, init()에서 이 함수에 적절한 정규식을 전달하십시오:
void FileTest::init()
{
QTest::failOnWarning(
QRegularExpression("QFile::.*: File(.*) already open"));
}경고가 발생하면 테스트를 실패시키는 일반적인 경우에는 매개변수를 전달하지 마십시오:
void FileTest::init()
{
QTest::failOnWarning();
}참고: ` ignoreMessage()`가 이 함수보다 우선하므로, ` ignoreMessage() `와 ` failOnWarning() ` 양쪽에 지정된 패턴과 일치하는 모든 경고는 무시됩니다.
이 함수는 Qt 6.3에서 도입되었습니다.
QTEST_FATAL_FAIL항목도 참조하십시오 .
[since 6.8] void QTest::failOnWarning()
경고가 출력되면 테스트 로그에 테스트 실패 항목을 추가합니다.
이 함수는 ` QTest::failOnWarning()`을 오버로드합니다.
이 함수는 Qt 6.8에서 도입되었습니다.
failOnWarning(const char *)도 참조하십시오 .
[since 6.3] void QTest::failOnWarning(const char *message)
message 가 출력되면 테스트 로그에 테스트 실패 항목을 추가합니다.
이 함수는 QTest::failOnWarning()을 오버로드합니다.
이 함수는 Qt 6.3에서 도입되었습니다.
failOnWarning()도 참조하십시오 .
void QTest::ignoreMessage(QtMsgType type, const char *message)
qDebug(), qInfo() 또는 qWarning()에 의해 생성된 메시지를 무시합니다. 해당 type 을 포함하는 message 이 출력된 경우, 이는 테스트 로그에서 제거됩니다. 테스트가 완료되었으나 message 이 출력되지 않은 경우, 테스트 로그에 테스트 실패 기록이 추가됩니다.
참고: 이 함수를호출하면 하나의 메시지만 무시됩니다. 무시하려는 메시지가 두 번 출력된 경우, ignoreMessage()도 두 번 호출해야 합니다.
예시:
QDir dir;
QTest::ignoreMessage(QtWarningMsg, "QDir::mkdir: Empty or null file name(s)");
dir.mkdir("");위의 예제는 QDir::mkdir()가 유효하지 않은 파일 이름으로 호출되었을 때 올바른 경고를 출력하는지 테스트합니다.
참고: ` message `는 UTF-8로 해석됩니다.
void QTest::ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)
qDebug(), qInfo() 또는 qWarning()에 의해 생성된 메시지를 무시합니다. messagePattern 와 해당 type 에 해당하는 메시지가 출력된 경우, 해당 메시지는 테스트 로그에서 제거됩니다. 테스트가 완료되었으나 해당 메시지가 출력되지 않은 경우, 테스트 실패 기록이 테스트 로그에 추가됩니다.
참고: 이 함수를호출하면 하나의 메시지만 무시됩니다. 무시하려는 메시지가 두 번 출력된 경우, ignoreMessage()를 두 번 호출해야 합니다.
이 함수는 오버로드된 함수입니다.
void QTest::keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
widget 에서 key 을 클릭하는 것을 시뮬레이션하며, 선택적으로 modifier 을 지정할 수 있습니다. delay 이 0보다 크면, 테스트는 delay 밀리초 동안 대기한 후 키를 클릭합니다.
예시:
QTest::keyClick(myWidget, Qt::Key_Escape);
QTest::keyClick(myWidget, Qt::Key_Escape, Qt::ShiftModifier, 200);위의 첫 번째 예제는 키보드 수정 키 없이 지연 시간 없이 myWidget 에서 escape 키를 클릭하는 것을 시뮬레이션합니다. 두 번째 예제는 테스트가 200 ms 동안 지연된 후 myWidget 에서 shift-escape 를 클릭하는 것을 시뮬레이션합니다.
QTest::keyClicks()도 참조하십시오 .
void QTest::keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
widget 에서 key 를 클릭하는 동작을 시뮬레이션하며, 선택 사항으로 modifier 를 지정할 수 있습니다. 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 에서 key 를 클릭하는 동작을 시뮬레이션하며, 선택 사항인 modifier 를 적용할 수 있습니다. delay 가 0보다 크면, 테스트는 키를 클릭하기 전까지 delay 밀리초 동안 대기합니다.
예시:
QTest::keyClick(&myWindow, Qt::Key_Escape);
QTest::keyClick(&myWindow, Qt::Key_Escape, Qt::ShiftModifier, 200);위의 첫 번째 예제는 키보드 수정 키 없이 지연 시간 없이 myWindow 에서 escape 키를 클릭하는 것을 시뮬레이션합니다. 두 번째 예제는 테스트가 200 ms 지연된 후 myWindow 에서 shift-escape 를 클릭하는 것을 시뮬레이션합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyClicks()도 참조하십시오 .
void QTest::keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
window 에서 key 를 클릭하는 동작을 시뮬레이션하며, 선택 사항으로 modifier 를 지정할 수 있습니다. delay 가 0보다 크면, 테스트는 delay 밀리초 동안 대기한 후 키를 클릭합니다.
예시:
QWidget myWindow;
QTest::keyClick(&myWindow, Qt::Key_Tab);위의 예제는 키보드 수정 키 없이 테스트 지연 시간 없이 myWindow 에서 a 를 클릭하는 것을 시뮬레이션합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyClicks()도 참조하십시오 .
void QTest::keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
widget 에서 키 조합( sequence )을 클릭하는 동작을 시뮬레이션합니다. 선택적으로, 키보드( modifier )를 지정할 수 있으며, 각 키 클릭 전에 테스트의 지연 시간( delay, 밀리초 단위)을 지정할 수도 있습니다.
예시:
QTest::keyClicks(myWidget, "hello world");위의 예제는 키보드 수정 키 없이, 테스트 지연 시간 없이 myWidget 에서 "hello world"를 나타내는 키 시퀀스를 클릭하는 것을 시뮬레이션합니다.
QTest::keyClick()도 참조하십시오 .
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
지정된 키 위치( key )와 연관된 키 상태( action)를 사용하여 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)
widget 에서 선택 사항인 modifier 을 사용하여 key 을 누르는 것을 시뮬레이션합니다. delay 이 0보다 크면, 테스트는 키를 누르기 전까지 delay 밀리초 동안 대기합니다.
참고: 나중에 keyRelease()을 사용하여 키를 놓아야 합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyRelease() 및 QTest::keyClick()도 참조하십시오 .
void QTest::keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
window 에서 선택 사항인 modifier 와 함께 key 키를 누르는 동작을 시뮬레이션합니다. delay 가 0보다 크면, 테스트는 delay 밀리초 동안 대기한 후 키를 누릅니다.
참고: 나중에 keyRelease()를 사용하여 키를 놓아야 합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyRelease() 및 QTest::keyClick()도 참조하십시오 .
void QTest::keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
window 에서 선택적 modifier 과 함께 key 를 누르는 동작을 시뮬레이션합니다. delay 가 0보다 크면, 테스트는 delay 밀리초 동안 대기한 후 키를 누릅니다.
참고: 적절한시점에 keyRelease()를 사용하여 키를 놓아야 합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyRelease() 및 QTest::keyClick()도 참조하십시오 .
void QTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
widget 에서 선택적 modifier 을 사용하여 key 를 해제하는 것을 시뮬레이션합니다. delay 가 0보다 크면, 테스트는 키를 해제하기 전에 delay 밀리초 동안 대기합니다.
QTest::keyPress() 및 QTest::keyClick()도 참조하십시오 .
void QTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
widget 에서 선택적 modifier 을 사용하여 key 를 해제하는 것을 시뮬레이션합니다. delay 가 0보다 크면, 테스트는 키를 해제하기 전에 delay 밀리초 동안 대기합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyClick()도 참조하십시오 .
void QTest::keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
window 에서 선택적 modifier 을 사용하여 key 를 해제하는 것을 시뮬레이션합니다. delay 가 0보다 크면, 테스트는 키를 해제하기 전에 delay 밀리초 동안 대기합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyPress() 및 QTest::keyClick()도 참조하십시오 .
void QTest::keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
window 에서 선택적 modifier 를 사용하여 key 를 해제하는 것을 시뮬레이션합니다. delay 가 0보다 크면, 테스트는 키를 해제하기 전에 delay 밀리초 동안 대기합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyClick()도 참조하십시오 .
void QTest::keySequence(QWidget *widget, const QKeySequence &keySequence)
widget 에 keySequence 를 입력하는 것을 시뮬레이션합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyClick() 및 QTest::keyClicks()도 참조하십시오 .
void QTest::keySequence(QWindow *window, const QKeySequence &keySequence)
window 에 keySequence 를 입력하는 동작을 시뮬레이션합니다.
이 함수는 오버로드된 함수입니다.
QTest::keyClick() 및 QTest::keyClicks()도 참조하십시오 .
void QTest::mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
widget 에서 마우스 클릭 button 을 시뮬레이션하며, 선택적으로 modifier 을 지정할 수 있습니다. 클릭 위치는 pos 로 정의되며, 기본 위치는 위젯의 중심입니다. delay 가 지정된 경우, 테스트는 버튼을 누르기 전과 놓기 전에 지정된 밀리초 수만큼 대기합니다.
QTest::mousePress() 및 QTest::mouseRelease()도 참조하십시오 .
void QTest::mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
window 에서 마우스 클릭 button 을 시뮬레이션하며, 선택적으로 stateKey 수식자를 사용할 수 있습니다. 클릭 위치는 pos 로 정의되며, 기본 위치는 창의 중앙입니다. delay 가 지정된 경우, 테스트는 버튼을 누르기 전과 놓기 전에 지정된 밀리초 수만큼 대기합니다.
이 함수는 오버로드된 함수입니다.
QTest::mousePress() 및 QTest::mouseRelease()도 참조하십시오 .
void QTest::mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
widget 에서 마우스 button 를 더블 클릭하는 동작을 시뮬레이션하며, 선택적으로 modifier 을 지정할 수 있습니다. 클릭 위치는 pos 로 정의되며, 기본 위치는 위젯의 중앙입니다. delay 이 지정된 경우, 테스트는 각 클릭 및 클릭 해제 전에 지정된 밀리초 수만큼 대기합니다.
QTest::mouseClick()도 참조하십시오 .
void QTest::mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
window 에서 마우스 button 를 더블 클릭하는 동작을 시뮬레이션하며, 선택적으로 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 에서 마우스 버튼 button 을 누르는 것을 시뮬레이션하며, 선택적으로 modifier 을 사용할 수 있습니다. 위치는 pos 으로 정의되며, 기본 위치는 위젯의 중심입니다. delay 이 지정된 경우, 테스트는 지정된 밀리초 동안 대기한 후 버튼을 누릅니다.
QTest::mouseRelease() 및 QTest::mouseClick()도 참조하십시오 .
void QTest::mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
window 에서 마우스 버튼 button 을 누르는 것을 시뮬레이션하며, 선택적으로 stateKey 수정을 적용할 수 있습니다. 위치는 pos 로 정의되며, 기본 위치는 창의 중앙입니다. delay 가 지정된 경우, 테스트는 버튼을 누르기 전까지 지정된 밀리초 수만큼 대기합니다.
이 함수는 오버로드된 함수입니다.
QTest::mouseRelease() 및 QTest::mouseClick()도 참조하십시오 .
void QTest::mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
widget 에서 마우스 버튼 button 을 놓는 동작을 시뮬레이션하며, 선택적으로 modifier 를 지정할 수 있습니다. 버튼이 놓이는 위치는 pos 로 정의되며, 기본 위치는 위젯의 중앙입니다. delay 가 지정된 경우, 테스트는 지정된 밀리초 수만큼 기다린 후 버튼을 놓습니다. 그렇지 않은 경우, 기본 시간(1ms)만큼 기다리며, 이 시간은 명령줄 인수를 통해 재정의할 수 있습니다.
참고: 이벤트를 개별적으로 전송하여 더블 클릭을테스트하려면 , 두 마우스 릴리스 이벤트 모두에 기본값보다 큰 짧은 지연 시간을 지정하십시오. 누르기, 릴리스, 누르기 및 릴리스에 대한 지연 시간의 합계는 QStyleHints::mouseDoubleClickInterval()보다 작아야 합니다. 하지만 이벤트 사이의 상태를 확인할 필요가 없다면 QTest::mouseDClick()를 사용하는 것이 더 좋습니다.
QSignalSpy doubleClickSpy(target, &TargetClass::doubleClicked);
const QPoint p(1, 2);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p);
QVERIFY(target.isPressed());
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.isPressed(), false);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.pressCount(), 2);
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(doubleClickSpy.count(), 1);QTest::mousePress() 및 QTest::mouseClick()도 참조하십시오 .
void QTest::mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
window 에서 마우스 버튼 button 을 stateKey 수정을 선택적으로 적용하여 놓는 것을 시뮬레이션합니다. 버튼이 놓이는 위치는 pos 로 정의되며, 기본 위치는 창의 중앙입니다. delay 가 지정된 경우, 테스트는 지정된 밀리초(ms) 동안 대기한 후 버튼을 놓습니다. 그렇지 않으면 기본 대기 시간(1 ms)만큼 대기하며, 이 값은 명령줄 인수를 통해 재정의할 수 있습니다.
참고: 이벤트를 개별적으로 전송하여 더블 클릭을테스트하려면 , 두 마우스 릴리스 이벤트 모두에 기본값보다 큰 짧은 지연 시간을 지정하십시오. 누르기, 릴리스, 누르기 및 릴리스에 대한 지연 시간의 합은 ` QStyleHints::mouseDoubleClickInterval()`보다 작아야 합니다. 하지만 이벤트 사이의 상태를 확인할 필요가 없다면 ` QTest::mouseDClick()`를 사용하는 것이 더 좋습니다.
QSignalSpy doubleClickSpy(target, &TargetClass::doubleClicked);
const QPoint p(1, 2);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p);
QVERIFY(target.isPressed());
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.isPressed(), false);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.pressCount(), 2);
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(doubleClickSpy.count(), 1);이 함수는 오버로드된 함수입니다.
QTest::mousePress() 및 QTest::mouseClick()도 참조하십시오 .
QTestData &QTest::newRow(const char *dataTag)
현재 테스트 데이터에 새 행을 추가합니다.
테스트 출력에서는 이 테스트 데이터를 사용하여 테스트 실행을 ‘ dataTag ’라는 이름으로 식별합니다.
테이블의 각 열에 대해 하나의 값씩 데이터를 스트리밍하는 데 사용할 수 있는 QTestData 참조를 반환합니다.
예:
void MyTestClass::addSingleStringRows()
{
QTest::addColumn<QString>("aString");
QTest::newRow("just.hello") << QString("hello");
QTest::newRow("a.null.string") << QString();
}참고: 이 함수는 테스트 프레임워크에 의해 호출되는 테스트의 데이터 함수 내에서만 호출할 수 있습니다.
더 자세한 예제는 ‘데이터 기반 테스트’를 참조하십시오.
addRow(), addColumn(), QFETCH()도 참조하십시오 .
int QTest::qExec(QObject *testObject, int argc = 0, char **argv = nullptr)
testObject 에 선언된 테스트를 실행합니다. 또한, initTestCase(), cleanupTestCase(), init() 및 cleanup() 와 같은 비공개 슬롯이 존재할 경우 해당 슬롯도 실행됩니다. 자세한 내용은 ‘테스트 생성’을 참조하십시오.
선택적으로 argc 및 argv 명령줄 인수를 지정할 수 있습니다. 인식되는 인수의 목록은 Qt Test 명령줄 인수를 참조하십시오.
다음 예제는 MyTestObject 에 있는 모든 테스트를 실행합니다:
MyTestObject test1;
QTest::qExec(&test1);이 함수는 실패한 테스트가 없으면 0을 반환하고, 하나 이상의 테스트가 실패했거나 처리되지 않은 예외가 발생한 경우에는 0이 아닌 값을 반환합니다. (건너뛴 테스트는 반환 값에 영향을 미치지 않습니다.)
독립형 테스트 애플리케이션의 경우, 편의 매크로인 QTEST_MAIN()를 사용하여 명령줄 인수를 파싱하고 테스트를 실행하는 main() 함수를 선언할 수 있으며, 이 경우 이 함수를 명시적으로 호출할 필요가 없습니다.
QTEST_MAIN() 매크로를 사용할 경우, 이 함수의 반환 값은 테스트 애플리케이션의 종료 코드이기도 합니다.
독립형 테스트 애플리케이션의 경우, 테스트 출력을 파일에 기록하거나 개별 테스트 함수를 실행하기 위한 명령줄 옵션이 올바르게 작동하지 않으므로 이 함수를 두 번 이상 호출해서는 안 됩니다.
참고: 이 함수는 재진입 가능하지 않으므로, 한 번에 하나의 테스트만 실행할 수 있습니다. qExec()로 실행된 테스트는 qExec()를 통해 다른 테스트를 실행할 수 없으며, 스레드 간에 qExec()를 동시에 호출할 수 없습니다.
main() 의 인자에서 가져오는 것이 아니라 프로그래밍 방식으로 인자를 생성한 경우, 유니코드 안전성을 보장하는 QTest::qExec(QObject *, const QStringList &)를 사용하는 것이 좋습니다.
QTEST_MAIN(), QTEST_GUILESS_MAIN(), QTEST_APPLESS_MAIN()도 참조하십시오 .
int QTest::qExec(QObject *testObject, const QStringList &arguments)
qExec(QObject *, int, char**)와 동일하게 동작하지만, char** 리스트 대신 arguments 의 QStringList 를 인수로 받습니다.
이 함수는 오버로드된 함수입니다.
QSharedPointer<QTemporaryDir> QTest::qExtractTestData(const QString &dirName)
리소스에서 디렉터리를 디스크로 추출합니다. 내용은 임시 폴더로 재귀적으로 추출됩니다. 반환 값에 대한 마지막 참조가 범위 밖으로 나가면 추출된 내용은 자동으로 삭제됩니다.
dirName 는 리소스에서 추출할 디렉터리의 이름입니다.
데이터가 추출된 임시 디렉터리를 반환하며, 오류가 발생한 경우에는 null을 반환합니다.
[since 6.5] void QTest::qRegisterTestCase(const QString &name, QTest::TestEntryFunction entryFunction)
테스트 name 를, 진입 함수 entryFunction 와 함께, 현재 바이너리의 중앙 테스트 케이스 레지스트리에 등록합니다.
매개변수 없이 배치 테스트 바이너리를 실행하면 name 가 목록에 표시됩니다. 테스트 바이너리를 name 의 argv[1]을 지정하여 실행하면 entryFunction 가 호출됩니다.
이 함수는 Qt 6.5에서 도입되었습니다.
[since 6.7] void QTest::qSleep(std::chrono::milliseconds msecs)
msecs 동안 대기하며, 테스트 실행을 차단합니다.
이 메서드는 이벤트 처리를 수행하지 않으며, 테스트가 응답하지 않는 상태가 됩니다. 대기 중에 네트워크 통신이 시간 초과될 수 있습니다. 비차단 대기 기능을 사용하려면 QTest::qWait()을 사용하십시오.
msecs 값은 0ms보다 커야 합니다.
참고: Qt 6.7부터 이 함수는 std::this_thread::sleep_for 를 사용하여 구현되므로, 소요 시간의 정확도는 표준 라이브러리 구현에 따라 달라집니다. Qt 6.7 이전에는 이 함수가 Unix에서는 nanosleep() 를, Windows에서는 Sleep() 를 호출했기 때문에, 이 함수에서 소요된 시간의 정확도는 운영 체제에 따라 달랐습니다.
예시:
using namespace std::chrono_literals;
QTest::qSleep(250ms);이 함수는 Qt 6.7에서 도입되었습니다.
QTest::qWait()도 참조하십시오 .
void QTest::qSleep(int ms)
ms 밀리초 동안 대기하며, 테스트 실행을 차단합니다.
다음과 호출하는 것과 동일합니다:
QTest::qSleep(std::chrono::milliseconds{ms});이것은 오버로드된 함수입니다.
[since 6.7] void QTest::qWait(std::chrono::milliseconds msecs)
msecs 가 완료될 때까지 대기합니다. 대기하는 동안 이벤트는 처리되며, 테스트는 사용자 인터페이스 이벤트나 네트워크 통신에 계속해서 반응할 수 있습니다.
예시:
using namespace std::chrono_literals;
int i = 0;
while (myNetworkServerNotResponding() && i++ < 50)
QTest::qWait(250ms);위의 코드는 네트워크 서버가 응답할 때까지 최대 약 12.5초 동안 대기합니다.
QTRY_* 매크로는 일반적으로 qWait()보다 더 나은 선택입니다. qWait()는 항상 전체 타임아웃 기간 동안 일시 중지되므로, 테스트가 유휴 상태가 되어 실행 속도가 느려질 수 있습니다.
QTRY_* 매크로는 조건이 충족되거나 타임아웃이 만료될 때까지 주기적으로 확인합니다. 따라서 테스트는 가능한 한 빨리 계속 진행되며 더 안정적으로 유지됩니다. 조건이 여전히 충족되지 않으면, 매크로는 타임아웃 시간을 한 번 두 배로 늘리고 새로운 값을 보고하므로 사용자가 이를 조정할 수 있습니다.
예를 들어, 위의 코드를 다음과 같이 다시 작성해 보십시오.
QTRY_VERIFY_WITH_TIMEOUT(!myNetworkServerNotResponding(), 12.5s);이 함수는 Qt 6.7에서 도입되었습니다.
QTest::qSleep(), QSignalSpy::wait(), QTRY_VERIFY_WITH_TIMEOUT()도 참조하십시오 .
void QTest::qWait(int msecs)
msecs 를 기다립니다. 다음 호출과 동일합니다:
QTest::qWait(std::chrono::milliseconds{msecs});이것은 오버로드된 함수입니다.
[since 6.7] template <typename Functor> bool QTest::qWaitFor(Functor predicate, QDeadlineTimer deadline = QDeadlineTimer(
defaultTryTimeout.load(std::memory_order_relaxed)))
deadline 의 유효 기간이 만료되거나, predicate 가 true를 반환할 때까지(둘 중 먼저 발생하는 시점까지) 대기합니다.
predicate 가 어느 시점에서든 true를 반환한 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
예시:
MyObject obj;
obj.startup();
using namespace std::chrono_literals;
const bool result = QTest::qWaitFor([&obj]() { return obj.isReady(); },
QDeadlineTimer(3s));위의 코드는 객체가 준비될 때까지 최대 3초 동안 대기합니다.
이 함수는 Qt 6.7에서 도입되었습니다.
template <typename Functor> bool QTest::qWaitFor(Functor predicate, int timeout)
timeout 밀리초 동안 대기하거나, predicate 가 true를 반환할 때까지 대기합니다.
이는 다음을 호출하는 것과 동일합니다:
qWaitFor(predicate, QDeadlineTimer(timeout));이는 오버로드된 함수입니다.
[since 6.10] bool QTest::qWaitForWindowActive(QWidget *widget, QDeadlineTimer timeout)
widget 가 timeout 밀리초 이내에 활성 상태인 경우 true 를 반환합니다. 그렇지 않은 경우 false 를 반환합니다.
이 메서드는 QWidget::show()을 호출하고, 진행하기 전에 위젯이 실제로 활성 상태(즉, 표시되고 포커스를 가지고 있는 상태)인지 확인해야 하는 테스트에서 유용합니다.
참고: 다른 창으로 인해 widget 가 활성 상태가 되는 것을 방해하는 경우,이 메서드는 타임아웃되어 false 를 반환합니다.
참고: 포커스는 배타적인속성이므로 , 메서드가 true 를 반환한 후에도 widget 는 언제든지 다른 창에 포커스를 빼앗길 수 있습니다.
이 함수는 Qt 6.10에서 도입되었습니다.
qWaitForWindowExposed() 및 QWidget::isActiveWindow()도 참조하십시오 .
[since 6.10] bool QTest::qWaitForWindowActive(QWindow *window, QDeadlineTimer timeout)
timeout 내에서 window 가 활성 상태인 경우 true 를 반환합니다. 그렇지 않은 경우 false 를 반환합니다.
이 메서드는 QWindow::show()를 호출하고, 진행하기 전에 해당 창이 실제로 활성 상태(즉, 표시되어 있고 포커스를 가지고 있는 상태)인지 확인해야 하는 테스트에서 유용합니다.
참고: 다른 창이 window 이 활성 상태가 되는 것을 방해하는 경우,이 메 서드는 타임아웃이 발생하여 false 을 반환합니다.
참고: 포커스는 배타적인속성이므로 , 메서드가 true 을 반환한 후에도 window 은 언제든지 다른 창에 포커스를 빼앗길 수 있습니다.
이 함수는 Qt 6.10에서 도입되었습니다.
qWaitForWindowExposed(), qWaitForWindowFocused() 및 QWindow::isActive()도 참조하십시오 .
[since 6.10] bool QTest::qWaitForWindowActive(QWidget *widget)
이 함수는 기본 타임아웃인 5초를 사용합니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.10에서 도입되었습니다.
[since 6.10] bool QTest::qWaitForWindowActive(QWindow *window)
이 함수는 기본 타임아웃인 5초를 사용합니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.10에서 도입되었습니다.
bool QTest::qWaitForWindowActive(QWidget *widget, int timeout)
timeout 는 밀리초 단위입니다.
이 함수는 오버로딩된 함수입니다.
bool QTest::qWaitForWindowActive(QWindow *window, int timeout)
timeout 는 밀리초 단위입니다.
이 함수는 오버로드된 함수입니다.
[since 6.10] bool QTest::qWaitForWindowExposed(QWidget *widget, QDeadlineTimer timeout)
widget 가 timeout 밀리초 이내에 노출되면 true 를 반환합니다. 그렇지 않으면 false 를 반환합니다.
이 메서드는 ` QWidget::show()`를 호출하고, 진행하기 전에 위젯이 실제로 표시되어 있는지 확인해야 하는 테스트에서 유용합니다.
참고: 창 클라이언트 영역이 보이지 않는 경우(예: 다른 창에 완전히 가려진 경우), 화면에 매핑된창이라도 노출된 것으로 간주되지 않을 수 있습니다. 이러한 경우, 이 메서드는 타임아웃이 발생하여 false 를 반환합니다.
이 함수는 Qt 6.10에서 도입되었습니다.
qWaitForWindowActive(), QWidget::isVisible() 및 QWindow::isExposed()도 참조하십시오 .
[since 6.10] bool QTest::qWaitForWindowExposed(QWindow *window, QDeadlineTimer timeout)
timeout 내에서 window 가 노출되어 있으면 true 를 반환합니다. 그렇지 않으면 false 를 반환합니다.
이 메서드는 QWindow::show()을 호출하고, 진행하기 전에 창이 실제로 표시되어 있는지 확인해야 하는 테스트에서 유용합니다.
참고: 창이 화면에 매핑되어 있더라도, 예를 들어 다른 창에 완전히 가려져 있는 등 창의 클라이언트 영역이 보이지 않는 경우, 여전히 노출된 것으로 간주되지 않을 수 있습니다. 이러한 경우, 이 메서드는 타임아웃이 발생하여 false 을 반환합니다.
이 함수는 Qt 6.10에서 도입되었습니다.
qWaitForWindowActive() 및 QWindow::isExposed()도 참조하십시오 .
[since 6.10] bool QTest::qWaitForWindowExposed(QWidget *widget)
이 함수는 기본 시간 제한인 5초를 사용합니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.10에서 도입되었습니다.
[since 6.10] bool QTest::qWaitForWindowExposed(QWindow *window)
이 함수는 5초의 기본 타임아웃을 사용합니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.10에서 도입되었습니다.
bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout)
timeout 는 밀리초 단위입니다.
이 함수는 오버로드된 함수입니다.
bool QTest::qWaitForWindowExposed(QWindow *window, int timeout)
timeout 는 밀리초 단위입니다.
이 함수는 오버로드된 함수입니다.
[since 6.7] bool QTest::qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout)
widget 가 timeout 내에서 포커스 창인 경우 true 을 반환합니다. 그렇지 않은 경우 false 을 반환합니다.
이 메서드는 QWidget::show()를 호출하고, 진행하기 전에 위젯이 포커스를 가지고 있는지(예: 키보드 이벤트 수신을 위해) 확인해야 하는 테스트에서 유용합니다.
참고: 다른 창이 widget 가 포커스를 얻는 것을 방해하는 경우,이 메서드는 타임아웃되어 false 를 반환합니다.
참고: 포커스는 배타적인속성이므로 , 메서드가 true 를 반환한 후에도 widget 는 언제든지 다른 창에 포커스를 빼앗길 수 있습니다.
이 함수는 Qt 6.7에서 도입되었습니다.
qWaitForWindowExposed(), qWaitForWindowActive(), QGuiApplication::focusWindow()도 참조하십시오 .
[since 6.7] bool QTest::qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout)
window 가 timeout 내에서 포커스를 가진 창인 경우 true 를 반환합니다. 그렇지 않은 경우 false 를 반환합니다.
이 메서드는 QWindow::show()을 호출하고, 진행하기 전에 해당 창이 포커스를 가지고 있는지(예: 키보드 이벤트 수신 등) 확인해야 하는 테스트에서 유용합니다.
참고: 다른 창이 window 가 포커스를 얻는 것을 방해하는 경우,이 메서드는 타임아웃되어 false 를 반환합니다.
참고: 포커스는 배타적인속성이므로 , 메서드가 true 를 반환한 후에도 window 는 언제든지 다른 창에 포커스를 빼앗길 수 있습니다.
이 함수는 Qt 6.7에서 도입되었습니다.
qWaitForWindowExposed(), qWaitForWindowActive(), QGuiApplication::focusWindow()도 참조하십시오 .
[since 6.10] bool QTest::qWaitForWindowFocused(QWidget *widget)
이 함수는 기본 타임아웃인 5초를 사용합니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.10에서 도입되었습니다.
[since 6.10] bool QTest::qWaitForWindowFocused(QWindow *window)
이 함수는 기본 타임아웃인 5초를 사용합니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.10에서 도입되었습니다.
void QTest::setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric)
이 테스트 함수의 벤치마크 결과를 result 로 설정합니다.
QBENCHMARK 매크로를 사용하지 않고 벤치마크 결과를 보고하려면 이 함수를 사용하십시오. metric 를 사용하여 Qt Test 가 결과를 어떻게 해석할지 지정하십시오.
결과의 컨텍스트는 테스트 함수 이름과 _data 함수의 데이터 태그가 됩니다. 이 함수는 각 테스트 함수에서 한 번만 호출할 수 있으며, 이후 호출 시 이전에 보고된 결과가 대체됩니다.
QBENCHMARK 매크로가 없는 테스트 함수의 경우, -iterations 명령줄 인수는 아무런 영향을 미치지 않는다는 점에 유의하십시오.
[noexcept, since 6.8] void QTest::setThrowOnFail(bool enable)
QCOMPARE()/QVERIFY() 호출이 실패할 때 예외를 발생시키도록 설정(enable = true)하거나, 예외 발생을 비활성화(enable = false)합니다(단순히 바로 앞의 함수 컨텍스트에서 반환되는 것과는 대조적으로).
이 기능은 참조 카운트 방식입니다. true 를 사용하여 이 함수를 N번 호출했다면, 시작 지점으로 돌아가기 위해 false 를 N번 호출해야 합니다.
QTEST_THROW_ON_FAIL C++ 매크로가 정의된 경우 이 호출은 아무런 효과도 없습니다.
참고: 이 기능을 사용하려면 예외 처리가 활성화된 상태로 테스트를 컴파일해야합니다 .
이 함수는 Qt 6.8에서 도입되었습니다.
setThrowOnSkip(), ThrowOnFailEnabler, ThrowOnFailDisabler 및 QTEST_THROW_ON_FAIL도 참조하십시오 .
[noexcept, since 6.8] void QTest::setThrowOnSkip(bool enable)
QSKIP() 호출 시 예외 발생을 활성화(enable = true)하거나 비활성화(enable= false)합니다(단순히 바로 앞의 함수 컨텍스트에서 반환되는 것과는 대조적으로).
이 기능은 참조 카운팅 방식입니다. 즉, ` true`을 사용하여 이 함수를 N번 호출했다면, 시작 지점으로 돌아가기 위해서는 ` false `을 사용하여 N번 호출해야 합니다.
QTEST_THROW_ON_SKIP C++ 매크로가 정의된 경우, 이 호출은 아무런 효과도 미치지 않습니다.
참고: 이 기능을 사용하려면 예외 처리가 활성화된 상태로 테스트를 컴파일해야합니다 .
이 함수는 Qt 6.8에서 도입되었습니다.
setThrowOnFail(), ThrowOnSkipEnabler, ThrowOnSkipDisabler 및 QTEST_THROW_ON_SKIP도 참조하십시오 .
char *QTest::toHexRepresentation(const char *ba, qsizetype length)
ba 문자열을 공백으로 구분된 16진수 문자열로 표현한 문자열 포인터를 반환합니다. 입력 문자열이 너무 길다고 판단되면 잘립니다. 잘린 부분은 반환된 문자열의 끝에 줄임표(…)로 표시됩니다. 호출자는 반환된 포인터에 대한 소유권을 가지며, 나중에 이 포인터를 operator delete[]에 전달해야 합니다.
length 는 문자열 ba 의 길이입니다.
template <typename T> char *QTest::toString(const T &value)
value 의 텍스트 표현을 반환합니다. 이 함수는 테스트가 실패할 경우 QCOMPARE()에서 자세한 정보를 출력하는 데 사용됩니다.
테스트에서 이 함수의 특화(specialization)나 오버로드(overload)를 추가하여 상세 출력을 활성화할 수 있습니다.
참고: Qt 5.5부터는 이 템플릿을 특수화하는 대신, 타입의 네임스페이스 내에 toString() 함수를 제공하는 것을 권장합니다. 코드가 Qt 5.4 또는 그 이전 버전의 QTestLib와 계속 호환되어야 하는 경우, 특수화를 계속 사용해야 합니다.
참고: toString()을호출하는 쪽에서는 delete[] 를 사용하여 반환된 데이터를 삭제해야 합니다. 구현에서는 new[] 또는 qstrdup()로 생성된 문자열을 반환해야 합니다. 이를 수행하는 가장 쉬운 방법은 QByteArray 또는 QString 를 생성한 다음, 이에 대해 QTest::toString()을 호출하는 것입니다(아래 두 번째 예제 참조).
특화 예시 (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 의 두 인스턴스 간 비교가 실패할 때마다, QCOMPARE()는 이 함수를 호출하여 MyPoint 의 내용을 테스트 로그에 출력합니다.
동일한 예제이지만 오버로딩을 사용한 경우(Qt 5.5 이상):
char *toString(const MyPoint &point) // should be inside the same namespace as MyPoint
{
return QTest::toString("MyPoint(" +
QByteArray::number(point.x()) + ", " +
QByteArray::number(point.y()) + ')');
}QCOMPARE()도 참조하십시오 .
char *toString(QSizePolicy sp)
sp 의 크기 정책에 대한 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *toString(QSizePolicy::ControlType ct)
ct 제어 유형을 텍스트로 변환한 값을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *toString(QSizePolicy::ControlTypes cts)
cts 의 제어 유형을 텍스트로 변환한 값을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *toString(QSizePolicy::Policy p)
p 정책의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QByteArray &ba)
바이트 배열 ba 의 문자열 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
QTest::toHexRepresentation()도 참조하십시오 .
char *QTest::toString(const QCborError &c)
주어진 CBOR 오류 c 의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QChar &character)
주어진 ` character`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QDate &date)
주어진 ` date`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QDateTime &dateTime)
dateTime 로 지정된 날짜와 시간의 문자열 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
[since 6.5] char *QTest::toString(const QKeySequence &ks)
ks 키 시퀀스의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.5에서 도입되었습니다.
char *QTest::toString(const QLatin1StringView &string)
주어진 ` string`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QPoint &point)
주어진 ` point`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QPointF &point)
주어진 ` point`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QRect &rectangle)
주어진 ` rectangle`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QRectF &rectangle)
주어진 ` rectangle`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QSize &size)
주어진 ` size`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QSizeF &size)
주어진 ` size`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QString &string)
주어진 ` string`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QStringView &string)
주어진 string 의 문자열 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QTime &time)
주어진 ` time`의 문자열 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QUrl &url)
주어진 ` url`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QUuid &uuid)
주어진 ` uuid`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QVariant &variant)
주어진 ` variant`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QVector2D &v)
2차원 벡터 ` v`를 텍스트 형식으로 변환하여 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QVector3D &v)
3차원 벡터 v 의 문자열 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(const QVector4D &v)
4차원 벡터 ` v`의 문자열 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
template <typename T1, typename T2> char *QTest::toString(const std::pair<T1, T2> &pair)
pair 의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
template <typename... Types> char *QTest::toString(const std::tuple<Types...> &tuple)
주어진 ` tuple`의 텍스트 표현을 반환합니다.
이 함수는 오버로드된 함수입니다.
char *QTest::toString(std::nullptr_t)
nullptr 를 포함하는 문자열을 반환합니다.
이 함수는 오버로드된 함수입니다.
QTest::QTouchEventWidgetSequence QTest::touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)
device 에 대한 QTouchEventSequence 를 생성하여 반환하며, 이를 통해 widget 에 대한 이벤트를 시뮬레이션합니다.
시퀀스에 터치 이벤트를 추가할 때, press(), move() 등의 호출에서 다른 위젯이 제공되지 않는 한, widget 는 제공된 위치를 화면 좌표로 변환하는 데에도 사용됩니다.
autoCommit 가 false로 설정되어 있지 않은 한, 터치 이벤트는 QTouchEventSequence 의 소멸자가 호출될 때(즉, 반환된 객체의 범위가 종료될 때) 이벤트 시스템에 커밋됩니다. autoCommit 가 false인 경우, commit()을 수동으로 호출해야 합니다.
createTouchDevice()를 호출하여 이 함수와 함께 사용할 테스트용 터치 장치를 생성할 수 있습니다.
QTest::QTouchEventSequence QTest::touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)
device 에 대한 QTouchEventSequence 를 생성하여 반환하며, 이를 통해 window 에 대한 이벤트를 시뮬레이션합니다.
시퀀스에 터치 이벤트를 추가할 때, press(), move() 등의 호출에서 별도의 창이 지정되지 않는 한, window 는 제공된 위치를 화면 좌표로 변환하는 데에도 사용됩니다.
autoCommit 가 false로 설정되지 않은 한, 터치 이벤트는 QTouchEventSequence 의 소멸자가 호출될 때(즉, 반환된 객체의 범위가 종료될 때) 이벤트 시스템에 커밋됩니다. autoCommit 가 false인 경우, commit()을 수동으로 호출해야 합니다.
createTouchDevice()를 호출하여 이 함수와 함께 사용할 테스트용 터치 장치를 생성할 수 있습니다.
[since 6.8] void QTest::wheelEvent(QWindow *window, QPointF pos, QPoint angleDelta, QPoint pixelDelta = QPoint(0, 0), Qt::KeyboardModifiers stateKey = Qt::NoModifier, Qt::ScrollPhase phase = Qt::NoScrollPhase)
window 내에서 로컬 창 좌표계 기준 pos 위치에서 휠 이벤트를 시뮬레이션합니다. angleDelta 에는 휠 회전 각도가 포함됩니다. 양수 값은 앞으로 회전을, 음수 값은 뒤로 회전을 의미합니다. pixelDelta 에는 화면상의 스크롤 거리(픽셀 단위)가 포함됩니다. 이 값은 null일 수 있습니다. 이벤트 발생 시점의 키보드 상태는 stateKey 로 지정됩니다. 이벤트의 스크롤 단계는 phase 로 지정됩니다.
이 함수는 Qt 6.8에서 도입되었습니다.
매크로 문서
QBENCHMARK
이 매크로는 테스트 내 코드의 성능을 측정하는 데 사용됩니다. 벤치마킹 대상 코드는 이 매크로 뒤에 나오는 코드 블록에 포함됩니다.
예:
void TestBenchmark::simple()
{
QString str1 = u"This is a test string"_s;
QString str2 = u"This is a test string"_s;
QCOMPARE(str1.localeAwareCompare(str2), 0);
QBENCHMARK {
str1.localeAwareCompare(str2);
}
}'벤치마크 만들기 ' 및 '벤치마크 작성하기'항목도 참조하십시오 .
QBENCHMARK_ONCE
QBENCHMARK_ONCE 매크로는 코드 블록을 한 번 실행하여 그 성능을 측정하기 위한 것입니다.
이 매크로는 테스트 내 코드의 성능을 측정하는 데 사용됩니다. 벤치마킹 대상 코드는 이 매크로 뒤에 이어지는 코드 블록 내에 포함됩니다.
QBENCHMARK와 달리, 포함된 코드 블록의 내용은 단 한 번만 실행됩니다. 소요 시간이 선택한 백엔드에서 측정할 수 있을 만큼 충분히 길지 않은 경우, 소요 시간은 "0"으로 보고됩니다.
‘벤치마크 생성 ’ 및 ‘벤치마크 작성’항목도 참조하십시오 .
QCOMPARE(actual, expected)
QCOMPARE() 매크로는 등호 연산자를 사용하여 테스트 대상 코드( actual )의 값과 테스트 함수( expected )의 값을 비교합니다. actual 와 expected 가 일치하면 실행이 계속됩니다. 일치하지 않으면 테스트 로그에 실패가 기록되고, 테스트 함수는 이후의 검사를 시도하지 않고 반환됩니다.
항상 QCOMPARE()의 매개변수 의미를 준수해야 합니다. 이 함수에 전달되는 첫 번째 매개변수는 항상 테스트 대상 코드에서 생성된 실제 값이어야 하며, 두 번째 매개변수는 항상 예상 값이어야 합니다. 값이 일치하지 않을 경우, QCOMPARE()는 해당 값들을 ‘Actual’ 및 ‘Expected’라는 레이블과 함께 출력합니다. 매개변수 순서가 뒤바뀔 경우, 실패한 테스트를 디버깅하는 데 혼란을 초래할 수 있으며, 0을 기대하는 테스트가 반올림 오류로 인해 실패할 수도 있습니다.
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 []`이어야 합니다. 즉, 호출 코드의 처리가 완료되면 ` delete[] `(` free() `이나 일반 ` delete`가 아닌)를 통해 해제되어야 합니다.
QVERIFY(), QTRY_COMPARE(), QTest::toString(), QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT() 및 QCOMPARE_GE()도 참조하십시오 .
[since 6.9] QCOMPARE_3WAY(lhs, rhs, order)
QCOMPARE_3WAY() 매크로는 입력 식 lhs 및 rhs 에 3방향 비교 연산자 <=> 를 적용하고, 그 결과가 order 인지 확인합니다. 결과가 참이면 실행이 계속됩니다. 그렇지 않으면 테스트 로그에 실패가 기록되고, 테스트 함수는 이후의 검사를 시도하지 않은 채 반환됩니다. 이 매크로는 ` order ` 인수로 Qt:: 및 std:: 순서 유형만 허용하며, 그렇지 않은 경우 어서션을 발생시킵니다.
참고: ` decltype(lhs <=> rhs) ` 이 std 순서 유형이라 하더라도 `order `은 Qt:: 순서 유형일 수 있습니다. ` decltype(lhs <=> rhs) ` 연산의 결과는 ` order`과 동일한 강도를 가져야 합니다. 그렇지 않으면 매크로를 적용할 때 컴파일 오류가 발생합니다. 예를 들어, ` decltype(lhs <=> rhs) `의 결과가 약한 순서 유형인 경우, ` order ` 인수는 부분 순서 또는 강한 순서 유형을 가질 수 없습니다.
참고: 이 매크로는 컴파일러가 <=> 연산자를 지원하는 경우에만 작동하며, 그렇지 않은 경우 필수 기능이 사용 불가능함을 정적으로 확인합니다. 매크로를 사용하기 전에 항상 __cpp_lib_three_way_comparison 가 정의되어 있는지 확인하고, 정의되어 있지 않다면 QSKIP을 사용하십시오.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
사용자 정의 클래스의 경우, ` QTest::toString()`를 오버로드하여 테스트 로그에 출력할 값의 형식을 지정할 수 있습니다.
이 매크로는 Qt 6.9에서 도입되었습니다.
[since 6.4] QCOMPARE_EQ(computed, baseline)
QCOMPARE_EQ() 매크로는 등호 연산자를 사용하여 computed 가 baseline 와 같은지 확인합니다. 조건이 참이면 실행이 계속됩니다. 그렇지 않으면 테스트 로그에 실패가 기록되고, 테스트 함수는 이후의 검사를 시도하지 않고 반환됩니다.
일반적으로 QVERIFY(computed == baseline); 를 호출하는 것과 유사하지만, 실패 시 computed 및 baseline 인자 표현식과 값을 보고하는 형식화된 오류 메시지를 출력합니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
사용자 정의 클래스의 경우, QTest::toString()를 오버로드하여 테스트 로그에 출력할 값의 형식을 지정할 수 있습니다.
참고: QCOMPARE()과 달리 , 이 매크로는 사용자 정의 유형 및 포인터에 대한 오버로드를 제공하지 않습니다. 따라서 예를 들어 두 개의 const char * 값을 매개변수로 전달하면 포인터가 비교되는 반면, QCOMPARE()는 C 스타일 문자열을 비교합니다.
이 매크로는 Qt 6.4에서 도입되었습니다.
QCOMPARE(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT(), QCOMPARE_GE()도 참조하십시오 .
[since 6.4] QCOMPARE_GE(computed, baseline)
QCOMPARE_GE() 매크로는 ‘ computed ’가 ‘ baseline ’ 이상인지 ‘보다 크거나 같음’ 연산자를 사용하여 확인합니다. 조건이 참이면 실행이 계속됩니다. 그렇지 않은 경우, 테스트 로그에 실패가 기록되고 테스트 함수는 이후의 검사를 시도하지 않고 반환됩니다.
일반적으로 QVERIFY(computed >= baseline); 를 호출하는 것과 유사하지만, 실패 시 computed 및 baseline 인자 표현식과 값을 보고하는 형식화된 오류 메시지를 출력합니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
사용자 정의 클래스의 경우, ` QTest::toString()`를 오버로드하여 테스트 로그에 출력할 값의 형식을 지정할 수 있습니다.
이 매크로는 Qt 6.4에서 도입되었습니다.
QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE() 및 QCOMPARE_GT()도 참조하십시오 .
[since 6.4] QCOMPARE_GT(computed, baseline)
QCOMPARE_GT() 매크로는大于 연산자를 사용하여 computed 가 baseline 보다 큰지 확인합니다. 조건이 참이면 실행이 계속됩니다. 그렇지 않은 경우, 테스트 로그에 실패가 기록되고 테스트 함수는 이후의 검사를 시도하지 않고 반환됩니다.
일반적으로 QVERIFY(computed > baseline); 을 호출하는 것과 유사하지만, 실패 시 computed 및 baseline 인자 표현식과 값을 포함하는 형식화된 오류 메시지를 출력합니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
사용자 정의 클래스의 경우, ` QTest::toString()`를 오버로드하여 테스트 로그에 출력할 값의 서식을 지정할 수 있습니다.
이 매크로는 Qt 6.4에서 도입되었습니다.
QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE() 및 QCOMPARE_GE()도 참조하십시오 .
[since 6.4] QCOMPARE_LE(computed, baseline)
QCOMPARE_LE() 매크로는 ‘ computed ’이 ‘ baseline ’ 이하인지 ‘작거나 같음(≤)’ 연산자를 사용하여 확인합니다. 조건이 참이면 실행이 계속됩니다. 그렇지 않으면 테스트 로그에 실패가 기록되고, 테스트 함수는 이후의 검사를 시도하지 않은 채 반환됩니다.
일반적으로 QVERIFY(computed <= baseline); 를 호출하는 것과 유사하지만, 실패 시 computed 및 baseline 인자 표현식과 값을 보고하는 형식화된 오류 메시지를 출력합니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
사용자 정의 클래스의 경우, QTest::toString()을 오버로드하여 테스트 로그에 출력할 값의 형식을 지정할 수 있습니다.
이 매크로는 Qt 6.4에서 도입되었습니다.
QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_GT() 및 QCOMPARE_GE()도 참조하십시오 .
[since 6.4] QCOMPARE_LT(computed, baseline)
QCOMPARE_LT() 매크로는 ‘ computed ’가 ‘ baseline ’보다 작은지 여부를 ‘<’ 연산자를 사용하여 확인합니다. 조건이 참이면 실행이 계속됩니다. 그렇지 않으면 테스트 로그에 실패가 기록되고, 테스트 함수는 이후의 검사를 시도하지 않은 채 반환됩니다.
일반적으로 QVERIFY(computed < baseline); 를 호출하는 것과 유사하지만, 실패 시 computed 및 baseline 인자 표현식과 값을 보고하는 형식화된 오류 메시지를 출력합니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
사용자 정의 클래스의 경우, QTest::toString()을 오버로드하여 테스트 로그에 출력할 값의 형식을 지정할 수 있습니다.
이 매크로는 Qt 6.4에서 도입되었습니다.
QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LE(), QCOMPARE_GT() 및 QCOMPARE_GE()도 참조하십시오 .
[since 6.4] QCOMPARE_NE(computed, baseline)
QCOMPARE_NE() 매크로는 부등호 연산자를 사용하여 computed 가 baseline 와 같지 않은지 확인합니다. 조건이 참이면 실행이 계속됩니다. 그렇지 않으면 테스트 로그에 실패가 기록되고, 테스트 함수는 이후의 검사를 시도하지 않은 채 반환됩니다.
일반적으로 QVERIFY(computed != baseline); 를 호출하는 것과 유사하지만, 실패 시 computed 및 baseline 인자 표현식과 값을 보고하는 형식화된 오류 메시지를 출력합니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
사용자 정의 클래스의 경우, QTest::toString()을 오버로드하여 테스트 로그에 출력할 값의 형식을 지정할 수 있습니다.
이 매크로는 Qt 6.4에서 도입되었습니다.
QCOMPARE_EQ(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT() 및 QCOMPARE_GE()도 참조하십시오 .
QEXPECT_FAIL(dataIndex, comment, mode)
QEXPECT_FAIL() 매크로는 다음에 호출되는 QCOMPARE() 또는 QVERIFY()을 예상 실패로 표시합니다. 테스트 로그에 실패가 기록되는 대신, 예상 실패가 보고됩니다.
QVERIFY() 또는 QCOMPARE()가 예상 실패로 표시되었으나 실제로는 통과한 경우, 테스트 로그에 예기치 않은 통과(XPASS)가 기록되며 이는 테스트 실패로 집계됩니다.
dataIndex 매개변수는 테스트 데이터의 어떤 항목에서 실패가 예상되는지를 설명합니다. 모든 항목에서 실패가 예상되거나 테스트 데이터가 없는 경우에는 빈 문자열("")을 전달하십시오.
comment 예상된 실패에 대한 테스트 로그에 추가됩니다.
mode 는 QTest::TestFailMode 이며, 테스트를 계속 실행할지 여부를 설정합니다. mode 은 예상된 테스트 실패가 발생했는지 여부와 관계없이 적용됩니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
예제 1:
QEXPECT_FAIL("", "Will fix in the next release", Continue);
QCOMPARE(i, 42);
QCOMPARE(j, 43);위의 예제에서, 변수 i 의 값이 42가 아닐 경우 테스트 출력에 ‘예상된 실패(expected fail)’가 기록됩니다. 변수 i 의 값이 42인 경우, 대신 ‘예상치 못한 성공(unexpected pass)’이 기록됩니다. QEXPECT_FAIL()은 예제 내의 두 번째 QCOMPARE() 문에는 영향을 미치지 않습니다.
예제 2:
QEXPECT_FAIL("data27", "Oh my, this is soooo broken", Abort);
QCOMPARE(i, 42);위의 테스트 함수는 테스트 데이터 입력값이 data27 인 경우( i 의 값과 무관하게) 실행을 계속하지 않습니다.
QTest::TestFailMode, QVERIFY(), QCOMPARE()도 참조하십시오 .
QFAIL(message)
이 매크로는 테스트 실패를 강제하는 데 사용할 수 있습니다. 테스트 실행이 중단되고, ‘ message ’라는 실패 메시지가 테스트 로그에 추가됩니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
예시:
if (sizeof(int) != 4)
QFAIL("This test has not been ported to this platform yet.");QFETCH(type, name)
fetch 매크로는 스택에 type 타입의 name 라는 이름의 로컬 변수를 생성합니다. name 과 type 은 테스트 데이터 테이블의 열과 일치해야 합니다. 이 조건이 검증되며, 검증에 실패할 경우 테스트가 중단됩니다.
테스트에 다음과 같은 데이터가 있다고 가정합니다:
void TestQString::toInt_data()
{
QTest::addColumn<QString>("aString");
QTest::addColumn<int>("expected");
QTest::newRow("positive+value") << "42" << 42;
QTest::newRow("negative-value") << "-42" << -42;
QTest::newRow("zero") << "0" << 0;
}테스트 데이터에는 aString 라는 이름의 QString 와 expected 라는 정수, 총 두 개의 요소가 있습니다. 실제 테스트에서 이러한 값을 가져오려면:
void TestQString::toInt()
{
QFETCH(QString, aString);
QFETCH(int, expected);
QCOMPARE(aString.toInt(), expected);
}aString 및 expected 는 현재 테스트 데이터로 초기화된 스택 상의 변수입니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다. 테스트 함수에는 _data 함수가 반드시 포함되어야 합니다.
QFETCH_GLOBAL(type, name)
이 매크로는 전역 데이터 테이블의 한 행에서 ‘ name ’라는 이름의 변수( type 타입)를 가져옵니다. ‘ 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;
}테스트 자체의 데이터는 행당 하나의 숫자입니다. 이 경우, initTestCase_data() 도 행당 하나의 로케일을 제공합니다. 따라서 이 테스트는 후자의 로케일과 전자의 숫자가 조합된 모든 경우에 대해 실행됩니다. 즉, 전역 테이블에 4개의 행이 있고 로컬 테이블에 3개의 행이 있다면, 테스트 함수는 12개의 서로 다른 테스트 케이스(4 × 3 = 12)에 대해 실행됩니다.
void TestQLocale::roundTripInt()
{
QFETCH_GLOBAL(QLocale, locale);
QFETCH(int, number);
bool ok;
QCOMPARE(locale.toInt(locale.toString(number), &ok), number);
QVERIFY(ok);
}로케일은 QFETCH_GLOBAL()을 사용하여 전역 데이터 테이블에서 읽어들여지고, 숫자는 QFETCH()을 사용하여 로컬 데이터 테이블에서 읽어들여집니다.
참고: 이 매크로는 initTestCase_data() 메서드를 가진 클래스의 테스트 메서드에서만 사용할 수 있습니다.
QFINDTESTDATA(filename)
filename 에서 참조하는 테스트 데이터 파일에 대한 ` QString `을 반환하거나, 테스트 데이터 파일을 찾을 수 없는 경우 빈 ` QString `을 반환합니다.
이 매크로를 사용하면 테스트 코드에 절대 파일 이름을 하드코딩하거나 오류가 발생하기 쉬운 상대 경로를 사용하지 않고도 외부 파일에서 데이터를 불러올 수 있습니다.
반환되는 경로는 다음 목록 중 기존 파일이나 디렉터리로 확인되는 첫 번째 경로가 됩니다:
- filename QCoreApplication::applicationDirPath()를 기준으로 한 상대 경로 ( 또는 객체가 생성된 경우에만 해당). QCoreApplication QApplication
- filename 테스트의 표준 설치 디렉터리(QLibraryInfo::TestsPath 에 소문자로 된 테스트 케이스 이름이 추가된 형태)를 기준으로 한 상대 경로.
- filename QFINDTESTDATA가 호출된 소스 파일이 포함된 디렉터리를 기준으로 합니다.
지정된 파일/디렉터리가 이러한 위치 중 어느 곳에도 존재하지 않으면, 테스트 로그에 경고가 출력됩니다.
예를 들어, 다음 코드에서:
bool tst_MyXmlParser::parse()
{
MyXmlParser parser;
QString input = QFINDTESTDATA("testxml/simple1.xml");
QVERIFY(parser.parse(input));
}테스트 데이터 파일은 다음 위치 중 가장 먼저 존재하는 파일로 결정됩니다:
/home/user/build/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml/usr/local/Qt-5.0.0/tests/tst_myxmlparser/testxml/simple1.xml/home/user/sources/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml
이를 통해 테스트는 테스트가 설치되었는지 여부와 테스트의 빌드 트리가 테스트의 소스 트리와 동일한지 여부에 관계없이 테스트 데이터를 찾을 수 있습니다.
참고: 소스 디렉터리에서 테스트 데이터를안정적으로 탐지하려면 qmake를 사용하거나, QT_TESTCASE_BUILDDIR 매크로가 컴파일러가 호출된 작업 디렉터리를 가리키도록 정의되어야 하며, 또는 소스 파일에 대한 절대 경로만 컴파일러에 전달되어야 합니다. 그렇지 않으면 소스 디렉터리의 절대 경로를 파악할 수 없습니다.
참고: CMake를 사용하고 QtTest 모듈이 타깃에 링크된 경우에도 QT_TESTCASE_BUILDDIR 매크로는 묵시적으로 정의됩니다. 타깃에서 QT_TESTCASE_BUILDDIR 속성을 설정하여 기본값인 QT_TESTCASE_BUILDDIR 을 변경할 수 있습니다.
참고: QTEST_APPLESS_MAIN() 매크로를 사용하여 main() 함수를 생성하는 테스트의경우 , QFINDTESTDATA 은 QCoreApplication::applicationDirPath()을 기준으로 테스트 데이터를 찾으려 하지 않습니다. 실제로 이는 QTEST_APPLESS_MAIN() 를 사용하는 테스트가 섀도 빌드 트리에서 실행될 경우 테스트 데이터를 찾지 못해 실패하게 됨을 의미합니다.
QSKIP(description)
테스트 함수 내에서 호출될 경우, QSKIP() 매크로는 테스트 로그에 실패 기록을 남기지 않고 테스트 실행을 중단합니다. 이 매크로를 사용하면 현재 구성에서는 의미가 없는 테스트를 건너뛸 수 있습니다. 예를 들어, 테스트 시스템에 필요한 글꼴이 설치되어 있지 않은 경우, 글꼴 렌더링 테스트에서 QSKIP()를 호출할 수 있습니다.
테스트 로그에는 “ description ”이라는 텍스트가 추가되며, 여기에는 테스트를 실행할 수 없었던 이유에 대한 설명이 포함되어야 합니다.
테스트가 데이터 기반인 경우, 테스트 함수 내에서 QSKIP()을 호출할 때마다 현재 테스트 데이터 행만 건너뛰게 되므로, QSKIP()을 무조건 호출하면 테스트 데이터의 각 행마다 테스트 로그에 하나의 건너뛰기 메시지가 생성됩니다.
_data 함수 내에서 호출될 경우, QSKIP() 매크로는 _data 함수의 실행을 중지하고 관련 테스트 함수의 실행을 차단합니다. 이는 데이터 기반 테스트를 완전히 생략하는 결과를 초래합니다. 개별 행을 생략하려면, 테스트 함수 내에서 QSKIP()을 사용하는 대신 _data 함수 내에서 간단한 if (condition) newRow(...) << ... 을 사용하여 조건부로 처리하십시오.
initTestCase_data() 에서 호출될 경우, QSKIP() 매크로는 모든 테스트 함수와 _data 함수를 건너뜁니다. initTestCase_data() 가 없거나, 단 한 행만 설정된 상태에서 initTestCase() 에서 호출될 경우, QSKIP()는 마찬가지로 전체 테스트를 건너뜁니다. 그러나 initTestCase_data() 에 행이 두 개 이상 포함되어 있는 경우, 각 행마다 initTestCase() 가 호출됩니다(그 다음 각 테스트가 실행되고 마지막으로 정리 단계가 수행됨). 따라서 initTestCase() 에서 QSKIP()를 호출하면 initTestCase_data() 에 의해 설정된 현재 전역 데이터 행에 대한 모든 테스트 함수만 건너뛰게 됩니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수 또는 _data 함수에서만 사용할 수 있습니다.
예:
if (!QSqlDatabase::drivers().contains("SQLITE"))
QSKIP("This test requires the SQLITE database driver");알려진 버그 건너뛰기
테스트에서 즉시 수정되지 않을 것으로 예상되는 알려진 버그가 발견된 경우, QEXPECT_FAIL() 매크로를 사용하여 실패를 기록하고 해당 알려진 문제에 대한 버그 추적 식별자를 참조하십시오. 테스트가 실행되면, 예상된 실패는 테스트 출력에 XFAIL로 표시되며 테스트 프로그램의 반환 코드를 설정할 때 실패로 집계되지 않습니다. 예상된 실패가 발생하지 않으면, 테스트 출력에 XPASS(예상치 못한 통과)가 보고되며 테스트 실패로 집계됩니다.
알려진 버그의 경우, 개발자는 XPASS 결과가 없으면 테스트도 업데이트해야 한다는 사실을 상기할 수 없어 버그를 수정할 수 없기 때문에, QSKIP()보다 QEXPECT_FAIL()을 사용하는 것이 더 좋습니다. QSKIP()을 사용하면 테스트를 수정하거나 다시 활성화해야 한다는 알림이 없어, 이를 수행하지 않을 경우 후속 회귀 결함이 보고되지 않습니다.
QEXPECT_FAIL() 및 ‘테스트를 제외하기 위한 적절한 메커니즘 선택’항목도 참조하십시오 .
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 가 자동으로 정의됩니다.
예시:
QTEST_MAIN(TestQString)QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec()도 참조하십시오 .
[since 6.8] QTEST_THROW_ON_FAIL
QCOMPARE() /QVERIFY() 등은 정의되면 실패 시 항상 예외를 발생시킵니다. 이 경우 QTest::setThrowOnFail()은 더 이상 아무런 효과도 발휘하지 않습니다.
이 매크로를 정의하면, 반환 유형이void 가 아닌 함수 내에서 QCOMPARE()이나 QVERIFY()을 사용하고자 할 때 유용합니다. 이 매크로가 정의되지 않은 경우, 예를 들어 QCOMPARE()는 return; 를 포함하는 문으로 확장되므로, void 이외의 값을 반환하는 함수(또는 람다)에서는 사용할 수 없습니다(예: QString). 여기에는 런타임 시에만 예외 발생이 활성화되는 경우( QTest::setThrowOnFail(true) 사용)도 포함됩니다. 이 매크로가 정의되면, ` QCOMPARE()`는 ` return;`이 없는 문으로 확장되며, 이는 모든 함수에서 사용할 수 있습니다.
이 매크로는 Qt 6.8에서 도입되었습니다.
[since 6.8] QTEST_THROW_ON_SKIP
QSKIP()가 정의되면 항상 예외가 발생합니다. 이 경우 QTest::setThrowOnSkip()는 더 이상 아무런 효과도 발휘하지 않습니다.
이 매크로를 정의하는 것은 반환 유형이void 가 아닌 함수 내에서 QSKIP()을 사용하고자 할 때 유용합니다. 이 매크로가 정의되지 않은 상태에서는, 예를 들어 QSKIP()이 return; 를 포함하는 문으로 확장되므로, void 이외의 값을 반환하는 함수(또는 람다)에서는 사용할 수 없습니다(예: QString). 여기에는 런타임 시에만 예외 발생이 활성화되는 경우( QTest::setThrowOnSkip(true) 사용)도 포함됩니다. 이 매크로가 정의되면, ` QSKIP()`는 ` return;`가 없는 문으로 확장되며, 이는 어떤 함수에서든 사용할 수 있습니다.
이 매크로는 Qt 6.8에서 도입되었습니다.
QTRY_COMPARE(actual, expected)
QTRY_COMPARE_WITH_TIMEOUT() 함수를 호출하여 actual 와 expected 값을 비교하며, 이 때 타임아웃은 5초로 설정됩니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수 내에서만 사용할 수 있습니다.
참조: 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()과 유사하지만, 비교 결과 true 가 반환되거나 timeout (밀리초 단위)에 도달할 때까지 computed 와 baseline 값의 비교를 반복적으로 수행합니다. 각 비교 사이에는 이벤트가 처리됩니다. 타임아웃에 도달하면 테스트 로그에 실패가 기록되고 테스트는 더 이상 실행되지 않습니다.
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 를 호출하여 computed 와 baseline 값을 비교하며, 타임아웃은 5초로 설정됩니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
이 매크로는 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 값이 같아지거나 timeout (밀리초 단위)에 도달할 때까지 두 값의 비교를 반복적으로 수행합니다. 각 비교 사이에는 이벤트가 처리됩니다. 타임아웃에 도달하면 테스트 로그에 실패가 기록되고 테스트는 더 이상 실행되지 않습니다.
Qt 6.8부터는 timeout 가 2s 와 같은 std::chrono 리터럴일 수도 있습니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() 및 QEXPECT_FAIL()도 참조하십시오 .
QTRY_VERIFY2(condition, message)
5초의 타임아웃을 설정하여 QTRY_VERIFY2_WITH_TIMEOUT()를 호출함으로써 condition 를 확인합니다. 이때 condition 가 여전히 false인 경우, message 가 출력됩니다. message 는 일반 C 문자열입니다.
예시:
QTRY_VERIFY2(list.size() > 2, QByteArray::number(list.size()).constData());참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수 내에서만 사용할 수 있습니다.
참조: QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY(), QVERIFY(), QCOMPARE(), QTRY_COMPARE(), QEXPECT_FAIL().
QTRY_VERIFY(condition)
5초의 타임아웃을 지정하여 ` QTRY_VERIFY_WITH_TIMEOUT()`를 호출함으로써 ` condition `를 확인합니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수 내에서만 사용할 수 있습니다.
참조: QTRY_VERIFY_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE(), QEXPECT_FAIL().
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)
QTRY_VERIFY2_WITH_TIMEOUT 매크로는 QTRY_VERIFY_WITH_TIMEOUT()과 유사하지만, 지정된 timeout (밀리초 단위)가 지난 후에도 condition 가 여전히 false인 경우 자세한 message 를 출력한다는 점이 다릅니다. message 는 일반 C 문자열입니다.
Qt 6.8부터는 timeout 가 2s 와 같은 std::chrono 리터럴일 수도 있습니다.
예시:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData(), 10s);참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
관련 항목: QTRY_VERIFY(), QTRY_VERIFY_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() 및 QEXPECT_FAIL().
QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)
QTRY_VERIFY_WITH_TIMEOUT() 매크로는 QVERIFY()과 유사하지만, 조건이 참이 되거나 timeout (밀리초 단위)에 도달할 때까지 condition 를 반복적으로 확인합니다. 각 평가 사이에는 이벤트가 처리됩니다. 타임아웃에 도달하면 테스트 로그에 실패가 기록되며, 테스트는 더 이상 실행되지 않습니다.
Qt 6.8부터는 timeout 가 2s 와 같은 std::chrono 리터럴일 수도 있습니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
QTRY_VERIFY(), QTRY_VERIFY2_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() 및 QEXPECT_FAIL()도 참조하십시오 .
QVERIFY2(condition, message)
QVERIFY2() 매크로는 QVERIFY()과 완전히 동일하게 동작하지만, condition 가 false일 때 message 를 반환한다는 점이 다릅니다. message 는 일반 C 문자열입니다.
이 메시지는 QString 에 qPrintable()을 적용하는 등, 일반 C 문자열을 반환하는 함수 호출을 통해서도 얻을 수 있습니다. 이 는 .args() 를 적용하여 데이터를 포맷하는 것을 포함하여, 일반적인 방법 중 어느 것으로든 생성될 수 있습니다.
예시:
QVERIFY2(QFileInfo("file.txt").exists(), "file.txt does not exist.");예를 들어, 파일 객체가 있고 해당 객체의 open() 함수를 테스트하려는 경우, 다음과 같은 문장을 사용하여 테스트를 작성할 수 있습니다:
bool opened = file.open(QIODevice::WriteOnly);
QVERIFY(opened);이 테스트가 실패하더라도, 파일이 왜 열리지 않았는지에 대한 단서는 전혀 제공되지 않습니다:
FAIL! : tst_QFile::open_write() 'opened' returned FALSE. ()
테스트 대상 값을 바탕으로 더 구체적인 오류 메시지를 구성할 수 있다면, ` QVERIFY2() `를 사용하여 해당 메시지와 테스트 조건을 함께 전달함으로써, 테스트 실패 시 더 구체적인 오류 메시지를 제공할 수 있습니다:
QVERIFY2(file.open(QIODevice::WriteOnly),
qPrintable(QString("open %1: %2")
.arg(file.fileName()).arg(file.errorString())));이 브랜치가 Qt CI 시스템에서 테스트 중인 경우, 위에서 설명한 상세한 오류 메시지가 코드 검토 시스템에 게시되는 요약에 삽입됩니다:
FAIL! : tst_QFile::open_write() 'opened' returned FALSE. (open /tmp/qt.a3B42Cd: No space left on device)
QVERIFY(), QCOMPARE(), QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT(), QCOMPARE_GE()도 참조하십시오.
QVERIFY(condition)
QVERIFY() 매크로는 condition 가 참인지 여부를 확인합니다. 참인 경우 실행이 계속됩니다. 그렇지 않은 경우, 테스트 로그에 실패가 기록되고 테스트는 더 이상 실행되지 않습니다.
테스트 실패 보고서에 추가 정보를 포함하는 것이 실용적이고 유용할 때 QVERIFY2()를 사용할 수 있습니다.
참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수 내에서만 사용할 수 있습니다.
예를 들어, 다음 코드는 ` QSignalSpy ` 객체가 유효한지 확인하기 위해 이 매크로를 사용하는 방법을 보여줍니다:
QVERIFY(spy.isValid());실패에 대한 자세한 정보를 얻으려면 QVERIFY(x == y) 대신 QCOMPARE(x, y) 을 사용하십시오. 비교가 실패할 때 예상값과 실제값을 모두 보고하기 때문입니다.
QCOMPARE(), QTRY_VERIFY(), QSignalSpy, QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT, QCOMPARE_GE()도 참조하십시오.
[since 6.3] QVERIFY_THROWS_EXCEPTION(exceptiontype, ...)
QVERIFY_THROWS_EXCEPTION 매크로는 가변 개수 인자로 지정된 표현식을 실행하고, 해당 표현식에서 발생된 예외를 잡을 수 있을 것으로 기대합니다.
다음과 같은 몇 가지 결과가 발생할 수 있습니다:
- 표현식이 exceptiontype 과 동일하거나 exceptiontype 에서 파생된 예외를 던지는 경우, 실행이 계속됩니다.
- 반면, 표현식이 예외를 던지지 않거나 던진 예외가 `
std::exception`에서 파생된 것이라면, 테스트 로그에 실패가 기록되고 매크로는 (외부 함수에서) 조기에 반환됩니다. - 던져진 예외가
std::exception이나 exceptiontype 에서 파생되지 않은 경우, 테스트 로그에 실패가 기록되고 예외가 다시 던져집니다. 이를 통해 예를 들어 pthread 취소 예외와 관련된 문제를 방지할 수 있습니다.
이 매크로는 가변 개수의 인수를 사용하므로, 표현식 내에 전처리가 인수 구분자로 간주하는 쉼표가 포함될 수 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다.
QVERIFY_THROWS_EXCEPTION(std::bad_alloc,
// macro arguments: ^ exceptiontype
std::vector<std::pair<int, long>>{42'000'000'000, {42, 42L}});
// macro arguments: \---------- 1 ----------/ \-------- 2 --------/ \3/ \ 4 /
// \----------------------- expression -----------------------/참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
이 매크로는 Qt 6.3에서 도입되었습니다.
[since 6.3] QVERIFY_THROWS_NO_EXCEPTION(...)
QVERIFY_THROWS_NO_EXCEPTION 매크로는 가변 개수의 인수로 지정된 식을 실행하고, 해당 식에서 발생되는 모든 예외를 처리하려고 시도합니다.
다음과 같은 여러 가지 결과가 발생할 수 있습니다.
- 표현식이 예외를 발생시키지 않으면 실행이 계속됩니다.
- 반대로, `
std::exception`에서 파생된 예외가 포착되면 테스트 로그에 실패가 기록되고 매크로는 조기에 반환됩니다(외부 함수에서 암시적 반환). std::exception에서 파생되지 않은 예외가 포착되면, 테스트 로그에 실패가 기록되고 해당 예외가 다시 던져집니다. 이를 통해 pthread 취소 예외와 같은 문제를 방지할 수 있습니다.
이 매크로는 가변 개수 인자를 사용하므로, 표현식 내에 전처리가 인자 구분자로 간주하는 쉼표가 포함될 수 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다.
QVERIFY_THROWS_NO_EXCEPTION(std::pair<int, long>{42, 42L});
// macro arguments: \---- 1 ----/ \-- 2 -/ \3 /참고: 이 매크로는 테스트 프레임워크에 의해 호출되는 테스트 함수에서만 사용할 수 있습니다.
이 매크로는 Qt 6.3에서 도입되었습니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.