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_ 로 시작하는 함수는 실행할 테스트 케이스로 취급됩니다. 테스트 케이스 작성에 대한 자세한 내용은 TestCaseSignalSpy 유형에 대한 설명서를 참조하세요.

참고: Qt Quick Test 모듈에는 바이너리 호환성이 보장되지 않습니다. 즉, Qt Quick Test 을 사용하는 애플리케이션은 해당 애플리케이션이 개발된 Qt 버전에서만 작동하도록 보장됩니다. 그러나 소스 호환성은 보장됩니다.

모듈 사용하기

QML API

Qt Quick Test 의 QML 유형은 QtTest 가져오기를 통해 사용할 수 있습니다. 이 유형을 사용하려면 .qml 파일에 다음 가져오기 문을 추가하세요:

import QtTest

C++ API

C++ API 을 사용하려면 직접 또는 다른 종속성을 통해 모듈 라이브러리에 대한 링크가 필요합니다. CMakeqmake를 비롯한 여러 빌드 도구가 이를 지원합니다.

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

Running Tests

테스트 케이스는 다음 코드로 구성된 C++ 하네스에 의해 시작됩니다:

#include <QtQuickTest>
QUICK_TEST_MAIN(example)

여기서 "example"는 이 테스트 집합을 고유하게 식별하는 데 사용하는 식별자입니다.

qmake#tab-qmake

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 이 지정되어 있는 경우 "make check"를 사용하여 테스트를 실행할 때 IMPORTPATH 에 추가된 각 가져오기 경로가 명령줄 인수로 전달됩니다:

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.qml
tst_example -input <full_path>/test.qml

참고: 예를 들어 섀도 빌드에는 qml 테스트 파일의 전체 경로를 지정하는 것이 필요합니다.

테스트 케이스에 QML 임포트가 필요한 경우 테스트 프로그램 명령줄에 -import 옵션으로 추가할 수 있습니다.

-functions 명령줄 옵션은 현재 테스트 함수 목록을 반환합니다. 테스트 함수의 이름을 인수로 사용하여 단일 테스트 함수를 실행할 수 있습니다. 예를 들어

tst_example Test_Name::function1

-help 명령줄 옵션은 사용 가능한 모든 옵션을 반환합니다.

tst_example -help

참고: Qt Quick 테스트 케이스를 실행하면 테스트 코드에 빠른 UI가 포함되어 있지 않더라도 항상 화면에 창이 표시됩니다. 이를 방지하려면 -platform offscreen 으로 테스트 실행 파일을 실행하세요.

QML 테스트 전에 C++ 실행하기

QML 테스트를 실행하기 전에 C++ 코드를 실행하려면 QUICK_TEST_MAIN_WITH_SETUP 매크로를 사용할 수 있습니다. 이는 무엇보다도 QML 엔진에서 컨텍스트 속성을 설정하는 데 유용할 수 있습니다.

이 매크로는 추가 유형 인수가 필요하다는 점을 제외하면 QUICK_TEST_MAIN 과 동일합니다. 테스트 프레임워크는 다음과 같은 이름으로 슬롯과 호출 가능한 함수를 호출합니다:

이름PurposeSince
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 include는 .cpp 파일의 파일 이름을 기반으로 합니다. 예를 들어, 위의 예에서 .cpp 파일의 이름은 src_qmltest_qquicktest.cpp 입니다. 파일 이름이 MyTest.cpp 인 경우 include는 입니다:

#include "MyTest.moc"

참조

라이선스

Qt Quick Qt Test는 The Qt Company의 상용 라이선스에 따라 사용할 수 있습니다. 또한 무료 소프트웨어 라이선스에 따라 사용할 수 있습니다. Qt 5.4부터 이러한 무료 소프트웨어 라이선스는 GNU 약소 일반 공중 사용 허가서 버전 3 또는 GNU 일반 공중 사용 허가서 버전 2입니다. 자세한 내용은 Qt 라이선스를 참조하십시오.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.