이 페이지에서

제3장: GUI 이벤트 시뮬레이션

Qt Test 에서는 그래픽 사용자 인터페이스를 테스트하기 위한 몇 가지 메커니즘을 다룹니다. 네이티브 윈도우 시스템 이벤트를 시뮬레이션하는 대신, Qt Test 는 내부 Qt 이벤트를 전송합니다. 즉, 테스트가 실행되는 시스템에 어떠한 부작용도 발생하지 않습니다.

이 장에서는 간단한 GUI 테스트를 작성하는 방법을 설명합니다.

GUI 테스트 작성하기

이번에는 QLineEdit 클래스의 동작을 테스트한다고 가정해 봅시다. 이전과 마찬가지로, 테스트 함수를 포함하는 클래스가 필요합니다:

#include <QtWidgets>
#include <QTest>

class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui();

};

유일한 차이점은 ` QTest ` 네임스페이스 외에도 ` Qt GUI ` 클래스 정의를 포함해야 한다는 점입니다.

void TestGui::testGui()
{
    QLineEdit lineEdit;

    QTest::keyClicks(&lineEdit, "hello world");

    QCOMPARE(lineEdit.text(), QString("hello world"));
}

테스트 함수를 구현할 때, 먼저 ` QLineEdit` 객체를 생성합니다. 그런 다음 ` QTest::keyClicks()` 함수를 사용하여 라인 에디트에 "hello world"를 입력하는 시뮬레이션을 수행합니다.

참고: 키보드 단축키를 올바르게 테스트하려면위젯이 표시되어 있어야 합니다.

QTest::keyClicks()는 위젯에서 일련의 키를 클릭하는 것을 시뮬레이션합니다. 선택적으로, 키보드 수정 키를 지정할 수 있으며, 각 키 클릭 후 테스트를 수행할 지연 시간(밀리초 단위)도 지정할 수 있습니다. 비슷한 방식으로, QTest::keyClick(), QTest::keyPress(), QTest::keyRelease(), QTest::mouseClick(), QTest::mouseDClick(), QTest::mouseMove(), QTest::mousePress() 및 QTest::mouseRelease() 함수를 사용하여 관련 GUI 이벤트를 시뮬레이션할 수 있습니다.

마지막으로, QCOMPARE() 매크로를 사용하여 라인 에디트의 텍스트가 예상대로인지 확인합니다.

독립 실행 파일 준비

앞서와 마찬가지로, 테스트 케이스를 독립 실행형 프로그램으로 만들기 위해서는 다음 두 줄이 필요합니다:

QTEST_MAIN(TestGui)
#include "testgui.moc"

QTEST_MAIN() 매크로는 모든 테스트 함수를 실행하는 간단한 main() 메서드로 확장되며, 테스트 클래스의 선언과 구현이 모두 .cpp 파일에 있으므로 Qt의 인트로스펙션이 정상적으로 작동하도록 생성된 moc 파일도 포함해야 합니다.

실행 파일 빌드

CMake나 qmake를 사용하여 테스트 케이스 실행 파일을 빌드할 수 있습니다.

CMake를 사용한 빌드

CMakeLists.txt 파일에서 빌드 설정을 구성하십시오:

# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

cmake_minimum_required(VERSION 3.16)
project(tutorial3 LANGUAGES CXX)

find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets)

qt_standard_project_setup()

qt_add_executable(tutorial3
    testgui.cpp
)

set_target_properties(tutorial3 PROPERTIES
    WIN32_EXECUTABLE TRUE
    MACOSX_BUNDLE TRUE
)

target_link_libraries(tutorial3 PRIVATE
    Qt6::Core
    Qt6::Gui
    Qt6::Test
    Qt6::Widgets
)

install(TARGETS tutorial3
    BUNDLE  DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

qt_generate_deploy_app_script(
    TARGET tutorial3
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})

다음으로, 명령줄에서 ` cmake `을 실행하거나, ` Qt-prefix/<version>/<platform>/bin/qt-cmake`에 위치한 ` qt-cmake ` 편의 스크립트를 사용하십시오:

<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja

그런 다음, 선호하는 생성기 도구를 실행하여 실행 파일을 빌드하십시오. 여기서는 Ninja를 사용합니다:

ninja

qmake를 사용한 빌드

.pro 파일에서 빌드 설정을 구성하십시오:

QT += widgets testlib

SOURCES = testgui.cpp

# install
target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial3
INSTALLS += target

다음으로 qmake 를 실행하고, 마지막으로 make 를 실행하여 실행 파일을 빌드하십시오:

qmake
make

실행 파일 실행

빌드된 실행 파일을 실행하면 다음과 같은 출력이 표시됩니다:

********* Start testing of TestGui *********
Config: Using QtTest library %VERSION%, Qt %VERSION%
PASS   : TestGui::initTestCase()
PASS   : TestGui::testGui()
PASS   : TestGui::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 20ms
********* Finished testing of TestGui **

© 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.