Qt Quick Test
소개
Qt Quick Test 는 QML 애플리케이션을 위한 단위 테스트 프레임워크입니다. 테스트 케이스는 ` TestCase ` 유형 내에서 JavaScript 함수 형태로 작성됩니다:
import QtQuick 2.3
import QtTest 1.0
TestCase {
name: "MathTests"
function test_math() {
compare(2 + 2, 4, "2 + 2 = 4")
}
function test_fail() {
compare(2 + 2, 5, "2 + 2 = 5")
}
}test_ 로 시작하는 이름의 함수는 실행될 테스트 케이스로 처리됩니다. 테스트 케이스 작성에 대한 자세한 내용은 TestCase 및 SignalSpy 타입에 대한 문서를 참조하십시오.
참고: Qt Quick Test 모듈에 대해서는 바이너리 호환성이보장되지 않습니다 . 즉, Qt Quick Test 를 사용하는 애플리케이션은 개발 시 사용된 Qt 버전에서만 작동이 보장됩니다. 그러나 소스 호환성은 보장됩니다.
모듈 사용법
QML API
Qt Quick Test 에 포함된 QML 타입은 QtTest 임포트를 통해 사용할 수 있습니다. 이 타입을 사용하려면 .qml 파일에 다음 임포트 문장을 추가하십시오:
import QtTestC++ API
C++ API 를 사용하려면 모듈 라이브러리와 직접 또는 다른 종속성을 통해 링크해야 합니다. CMake 및 qmake를 비롯한 여러 빌드 도구가 이를 위해 전용 지원을 제공합니다.
CMake를 사용한 빌드
find_package() 명령어를 사용하여 Qt6 패키지 내에서 필요한 모듈 구성 요소를 찾아보세요:
find_package(Qt6 REQUIRED COMPONENTS QuickTest)
target_link_libraries(mytarget PRIVATE Qt6::QuickTest)CMake를 사용한 빌드 개요도 참조하십시오.
qmake를 사용한 빌드
해당 C++ 라이브러리를 링크하는 방법에는 두 가지가 있습니다. 테스트 프로젝트에서 QML TestCase 을 사용하는 경우, 프로젝트 파일에 이미 다음 줄이 포함되어 있어야 합니다:
CONFIG += qmltestcase이렇게 하면 테스트가 C++ QtQuickTest 라이브러리에 링크됩니다.
C++ 전용 테스트 프로젝트인 경우, 프로젝트 파일에 다음 줄을 추가할 수 있습니다:
QT += qmltest테스트 실행
테스트 케이스는 다음 코드로 구성된 C++ 하네스에 의해 실행됩니다:
#include <QtQuickTest>
QUICK_TEST_MAIN(example)여기서 "example"는 이 테스트 집합을 고유하게 식별하는 데 사용되는 식별자입니다.
CMakeLists.txt 파일을 구성하고, 선호하는 생성기를 사용하여 프로젝트를 빌드하세요.
cmake_minimum_required(VERSION 3.2)
project(tst_example LANGUAGES CXX)
enable_testing()
find_package(Qt6 REQUIRED COMPONENTS QuickTest Qml)
#[[The test harness scans the specified source directory recursively
for "tst_*.qml" files. By default, it looks in the current directory,
which is usually where the executable is. This command makes it look
in the project's source directory instead.]]
add_definitions(-DQUICK_TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
qt_standard_project_setup(REQUIRES 6.6)
add_executable(tst_example tst_example.cpp)
add_test(NAME tst_example COMMAND tst_example)
target_link_libraries(tst_example
PRIVATE
Qt6::QuickTest
Qt6::Qml
)프로젝트 파일에 CONFIG += qmltestcase 를 추가하십시오:
TEMPLATE = app
TARGET = tst_example
CONFIG += warn_on qmltestcase
SOURCES += tst_example.cpp.pro 파일에 IMPORTPATH 가 지정되어 있으면, IMPORTPATH 에 추가된 각 임포트 경로는 "make check"를 사용하여 테스트를 실행할 때 명령줄 인수로 전달됩니다:
IMPORTPATH += $$PWD/../imports/my_module1 $$PWD/../imports/my_module2테스트 하네스는 지정된 소스 디렉터리를 재귀적으로 스캔하여 "tst_*.qml" 파일을 찾습니다. QUICK_TEST_SOURCE_DIR 가 정의되지 않은 경우, 하네스가 실행될 때 현재 디렉터리가 스캔됩니다. 테스트에서 사용되는 보조 QML 컴포넌트에 대한 다른 *.qml 파일들이 나타날 수 있습니다.
-input 명령줄 옵션을 런타임에 설정하여 다른 디렉터리의 테스트 케이스를 실행할 수 있습니다. 이는 컴파일된 디렉터리 이름이 호스트를 가리키는 대상 기기에서 테스트를 실행할 때 필요할 수 있습니다. 예를 들어:
tst_example -input /mnt/SDCard/qmltests-input 옵션을 사용하여 단일 파일을 실행할 수도 있습니다. 예를 들어:
tst_example -input data/test.qmltst_example -input <full_path>/test.qml참고: qml 테스트 파일의 전체 경로를지정하는 것은 예를 들어 섀도 빌드(shadow builds)에 필요합니다.
테스트 케이스에 QML 임포트가 필요한 경우, 테스트 프로그램 명령줄에 ` -import ` 옵션으로 이를 추가할 수 있습니다.
-functions 명령줄 옵션을 사용하면 현재 테스트 함수 목록을 확인할 수 있습니다. 테스트 함수 이름을 인수로 지정하여 단일 테스트 함수를 실행할 수도 있습니다. 예를 들어:
tst_example Test_Name::function1-help 명령줄 옵션을 사용하면 사용 가능한 모든 옵션을 확인할 수 있습니다.
tst_example -help참고: Qt Quick 테스트 케이스를실행하면 테스트 코드에 Quick UI가 포함되어 있지 않더라도 항상 화면에 창이 표시됩니다. 이를 방지하려면 -platform offscreen 옵션을 사용하여 테스트 실행 파일을 실행하십시오.
QML 테스트 실행 전 C++ 코드 실행
QML 테스트가 실행되기 전에 C++ 코드를 실행하려면 QUICK_TEST_MAIN_WITH_SETUP 매크로를 사용할 수 있습니다. 이는 QML 엔진의 컨텍스트 속성을 설정하는 등 여러 용도로 유용할 수 있습니다.
이 매크로는 QUICK_TEST_MAIN 와 동일하지만, 유형 인자가 하나 더 추가된다는 점이 다릅니다. 테스트 프레임워크는 다음과 같은 이름의 슬롯 및 호출 가능한 함수를 호출합니다:
| 이름 | 목적 | 시점 |
|---|---|---|
void applicationAvailable() | QApplication 객체가 인스턴스화된 직후 호출됩니다. 이 함수를 사용하여 QQmlEngine 인스턴스가 필요하지 않은 초기화 작업을 수행하십시오. | Qt 5.12 |
void qmlEngineAvailable(QQmlEngine *) | QML 엔진을 사용할 수 있게 되면 호출됩니다. 이 시점에는 모든 import paths, plugin paths 및 extra file selectors 가 엔진에 설정되어 있을 것입니다. 이 함수는 각 QML 테스트 파일마다 한 번씩 호출되므로, 모든 인수는 해당 테스트에 고유합니다. 예를 들어, 이는 각 QML 테스트 파일이 자체 QML 엔진을 갖게 됨을 의미합니다. 이 함수는 QML 타입 및 add import paths 등을 등록하는 데 사용할 수 있습니다. | Qt 5.11 |
void cleanupTestCase() | 테스트 실행이 완료된 직후 호출됩니다. 모든 객체가 소멸되기 전에 정리 작업을 수행하려면 이 함수를 사용하십시오. | Qt 5.12 |
다음 예제는 매크로를 사용하여 QML 엔진의 컨텍스트 속성을 설정하는 방법을 보여줍니다.
// src_qmltest_qquicktest.cpp
#include <QtQuickTest>
#include <QQmlEngine>
#include <QQmlContext>
#include <QGuiApplication>
class Setup : public QObject
{
Q_OBJECT
public:
Setup() {}
public slots:
void applicationAvailable()
{
// Initialization that only requires the QGuiApplication object to be available
}
void qmlEngineAvailable(QQmlEngine *engine)
{
// Initialization requiring the QQmlEngine to be constructed
engine->rootContext()->setContextProperty("myContextProperty", QVariant(true));
}
void cleanupTestCase()
{
// Implement custom resource cleanup
}
};
QUICK_TEST_MAIN_WITH_SETUP(mytest, Setup)
#include "src_qmltest_qquicktest.moc".moc 의 포함 문은 .cpp 파일의 파일 이름을 기반으로 합니다. 예를 들어, 위의 예제에서 .cpp 파일의 이름은 src_qmltest_qquicktest.cpp 입니다. 파일 이름이 MyTest.cpp 이라면, 포함 문은 다음과 같습니다:
#include "MyTest.moc"참고
라이선스
Qt Quick Qt Test는 The Qt Company의 상용 라이선스에 따라 제공됩니다. 또한, 자유 소프트웨어 라이선스 하에서도 제공됩니다. Qt 5.4부터 이러한 자유 소프트웨어 라이선스는 GNU Lesser General Public License 버전 3 또는 GNU General Public License 버전 2입니다. 자세한 내용은 Qt 라이선싱을 참조하십시오.
© 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.