TestCase QML Type

단위 테스트 케이스를 나타냅니다. 더 보기...

Import Statement: import QtTest
Inherits:

Item

속성

방법

자세한 설명

QML 테스트 케이스 소개

테스트 케이스는 테스트케이스 유형 내에서 자바스크립트 함수로 작성됩니다:

import QtQuick 2.0
import QtTest 1.2

TestCase {
    name: "MathTests"

    function test_math() {
        compare(2 + 2, 4, "2 + 2 = 4")
    }

    function test_fail() {
        compare(2 + 2, 5, "2 + 2 = 5")
    }
}

이름이 "test_"로 시작하는 함수는 실행할 테스트 케이스로 취급됩니다. name 속성은 출력의 함수 앞에 접두사를 붙이는 데 사용됩니다:

********* Start testing of MathTests *********
Config: Using QTest library 4.7.2, Qt 4.7.2
PASS   : MathTests::initTestCase()
FAIL!  : MathTests::test_fail() 2 + 2 = 5
   Actual (): 4
   Expected (): 5
   Loc: [/home/.../tst_math.qml(12)]
PASS   : MathTests::test_math()
PASS   : MathTests::cleanupTestCase()
Totals: 3 passed, 1 failed, 0 skipped
********* Finished testing of MathTests *********

JavaScript 속성이 작동하는 방식 때문에 테스트 함수가 발견되는 순서를 예측할 수 없습니다. 예측 가능성을 높이기 위해 테스트 프레임워크는 이름 오름차순으로 함수를 정렬합니다. 이는 순서대로 실행해야 하는 두 개의 테스트가 있을 때 도움이 될 수 있습니다.

여러 테스트 케이스 유형을 제공할 수 있습니다. 테스트가 모두 완료되면 테스트 프로그램이 종료됩니다. 전제 조건이 실패하여 테스트 케이스를 실행할 필요가 없는 경우 optional 을 true로 설정할 수 있습니다.

데이터 기반 테스트

"_데이터"로 끝나는 함수 이름을 사용하여 테이블 데이터를 테스트에 제공할 수 있습니다. 또는 init_data() 함수를 사용하여 테스트 케이스 유형에 일치하는 "_data" 함수가 없는 모든 테스트 함수에 대한 기본 테스트 데이터를 제공할 수 있습니다:

import QtQuick 2.0
import QtTest 1.2

TestCase {
    name: "DataTests"

    function init_data() {
      return [
           {tag:"init_data_1", a:1, b:2, answer: 3},
           {tag:"init_data_2", a:2, b:4, answer: 6}
      ];
    }

    function test_table_data() {
        return [
            {tag: "2 + 2 = 4", a: 2, b: 2, answer: 4 },
            {tag: "2 + 6 = 8", a: 2, b: 6, answer: 8 },
        ]
    }

    function test_table(data) {
        //data comes from test_table_data
        compare(data.a + data.b, data.answer)
    }

    function test_default_table(data) {
        //data comes from init_data
        compare(data.a + data.b, data.answer)
    }
}

테스트 프레임워크는 테이블의 모든 행을 반복하고 각 행을 테스트 함수에 전달합니다. 표시된 것처럼 테스트에 사용하기 위해 열을 추출할 수 있습니다. tag 열은 특별한 열로, 행이 실패할 때 테스트 프레임워크에 의해 인쇄되어 독자가 통과한 테스트 집합 중에서 어떤 사례가 실패했는지 식별할 수 있도록 도와줍니다.

벤치마크

이름이 "벤치마크_"로 시작하는 함수는 Qt 벤치마크 프레임워크로 여러 번 실행되며, 실행에 대한 평균 타이밍 값이 보고됩니다. 이는 C++ 버전의 QTestLib에서 QBENCHMARK 매크로를 사용하는 것과 동일합니다.

TestCase {
    id: top
    name: "CreateBenchmark"

    function benchmark_create_component() {
        let component = Qt.createComponent("item.qml")
        let obj = component.createObject(top)
        obj.destroy()
        component.destroy()
    }
}

RESULT : CreateBenchmark::benchmark_create_component:
     0.23 msecs per iteration (total: 60, iterations: 256)
PASS   : CreateBenchmark::benchmark_create_component()

QBENCHMARK_ONCE 매크로의 효과를 얻으려면 테스트 함수 이름 앞에 "benchmark_once_"를 붙이세요.

키보드 및 마우스 이벤트 시뮬레이션

keyPress(), keyRelease(), keyClick() 메서드는 단위 테스트 내에서 키보드 이벤트를 시뮬레이션하는 데 사용할 수 있습니다. 이벤트는 현재 포커스가 맞춰진 QML 항목으로 전달됩니다. Qt.Key 열거형 값 또는 라틴1 문자(길이 1의 문자열)를 전달할 수 있습니다.

Rectangle {
    width: 50; height: 50
    focus: true

    TestCase {
        name: "KeyClick"
        when: windowShown

        function test_key_click() {
            keyClick(Qt.Key_Left)
            keyClick("a")
            ...
        }
    }
}

mousePress(), mouseRelease(), mouseClick(), mouseDoubleClickSequence() 및 mouseMove() 메서드는 비슷한 방식으로 마우스 이벤트를 시뮬레이션하는 데 사용할 수 있습니다.

테스트에서 다른 창을 생성하는 경우 해당 창이 활성화되어 테스트케이스의 창에서 포커스를 훔칠 수 있습니다. 테스트 케이스의 창이 활성화되어 있는지 확인하려면 다음 코드를 사용하세요:

testCase.Window.window.requestActivate()
tryCompare(testCase.Window.window, "active", true)

참고: 키보드 및 마우스 이벤트는 메인 창이 표시된 후에만 전달할 수 있습니다. 그 전에 이벤트를 전달하려는 시도는 실패합니다. whenwindowShown 속성을 사용하여 메인 창이 언제 표시되었는지 추적하세요.

동적으로 생성된 테스트 개체 관리하기

QML 테스트의 일반적인 패턴은 항목을 동적으로 생성한 다음 테스트 함수가 끝날 때 소멸하는 것입니다:

TestCase {
    id: testCase
    name: "MyTest"
    when: windowShown

    function test_click() {
        let item = Qt.createQmlObject("import QtQuick 2.0; Item {}", testCase);
        verify(item);

        // Test item...

        item.destroy();
    }
}

이 패턴의 문제점은 테스트 함수에 오류가 발생하면 item.destroy() 호출이 건너뛰게 되어 테스트 케이스가 완료될 때까지 항목이 씬에 남아 있다는 것입니다. 이로 인해 입력 이벤트를 차단하거나 관련 없는 디버그 출력을 생성하여 코드 실행을 추적하기 어렵게 만드는 등 향후 테스트에 방해가 될 수 있습니다.

대신 createTemporaryQmlObject()를 호출하면 테스트 함수가 끝날 때 객체가 소멸되도록 보장됩니다:

TestCase {
    id: testCase
    name: "MyTest"
    when: windowShown

    function test_click() {
        let item = createTemporaryQmlObject("import QtQuick 2.0; Item {}", testCase);
        verify(item);

        // Test item...

        // Don't need to worry about destroying "item" here.
    }
}

ComponentcreateObject() 함수를 통해 생성된 객체의 경우 createTemporaryObject() 함수를 사용할 수 있습니다.

애플리케이션 로직에서 테스트 분리하기

대부분의 경우 테스트를 다른 프로젝트로 분할하고 연결하여 애플리케이션 로직에서 테스트를 분리하고 싶을 것입니다.

예를 들어 다음과 같은 프로젝트 구조를 가질 수 있습니다:

.
| — CMakeLists.txt
| — main.cpp
| - main.qml
| — MyModule
    | — MyButton.qml
    | — CMakeLists.txt
| — tests
    | — tst_testqml.qml
    | — main.cpp
    | — setup.cpp
    | — setup.h

이제 MyModule/MyButton.qml 를 테스트하려면 MyModule/CMakeLists.txt 에서 MyModule 에 대한 라이브러리를 만들고 테스트 프로젝트인 tests/UnitQMLTests/CMakeLists.txt 에 링크합니다:

    ...
qt_add_library(MyModule STATIC)

qt6_add_qml_module(MyModule
    URI MyModule
    QML_FILES MyButton.qml
)
    ...
#include <QtQuickTest/quicktest.h>
#include "setup.h"

QUICK_TEST_MAIN_WITH_SETUP(TestQML, Setup)
#include "setup.h"

void Setup::applicationAvailable()
{
    // custom code that doesn't require QQmlEngine
}

void Setup::qmlEngineAvailable(QQmlEngine *engine)
{
    // add import paths
}

void Setup::cleanupTestCase()
{
    // custom code to clean up before destruction starts
}
#ifndef SETUP_H
#define SETUP_H

#include <QObject>
#include <QQmlEngine>

class Setup : public QObject
{
    Q_OBJECT
public:
    Setup() = default;

public slots:
    void applicationAvailable();
    void qmlEngineAvailable(QQmlEngine *engine);
    void cleanupTestCase();
};

#endif // SETUP_H
    ...
add_subdirectory(MyModule)
add_subdirectory(tests)

qt_add_executable(MyApplication
    src/main.cpp
)

qt_add_qml_module(MyApplication
    URI MyApplication
    QML_FILES main.qml
)
    ...

그런 다음 tests/tst_testqml.qml 에서 MyModule/MyButton.qml 을 가져올 수 있습니다:

import QtQuick
import QtQuick.Controls

import QtTest
import MyModule

Item {
    width: 800
    height: 600

    MyButton {
        id: myButton
        anchors.centerIn: parent
    }

    TestCase {
        name: "MyButton"
        when: windowShown

        function test_clickToExpand() {
            const widthBeforeClick = myButton.width;
            mouseClick(myButton);
            const widthAfterClick = myButton.width;
            verify(widthBeforeClick < widthAfterClick);
        }
    }
}
import QtQuick
import QtQuick.Controls

Button {
    width: 50
    height: 50
    onClicked: width = 100
}

SignalSpyQt Quick Test.

속성 문서

completed : bool

이 속성은 테스트 케이스가 실행을 완료하면 true로 설정됩니다. 테스트 케이스는 한 번만 실행됩니다. 초기 값은 거짓입니다.

runningwhen참조하세요 .


name : string

이 속성은 결과 보고를 위한 테스트 케이스의 이름을 정의합니다. 기본값은 빈 문자열입니다.

TestCase {
    name: "ButtonTests"
    ...
}

optional : bool

테스트 애플리케이션에 여러 개의 TestCase 유형을 제공할 수 있습니다. 모든 테스트가 완료되면 애플리케이션이 종료됩니다. 테스트 케이스가 실행될 필요가 없는 경우(전제 조건이 실패했기 때문에) 이 속성을 true로 설정할 수 있습니다. 기본값은 false입니다.

TestCase {
    when: false
    optional: true
    function test_not_run() {
        verify(false)
    }
}

whencompleted참조하세요 .


running : bool

테스트 케이스가 실행되는 동안 이 속성은 true로 설정됩니다. 초기 값은 거짓이며 테스트 케이스가 완료되면 다시 거짓이 됩니다.

completedwhen도 참조 하세요.


when : bool

애플리케이션에서 테스트 케이스가 실행되도록 하려면 이 속성을 true로 설정해야 합니다. 기본값은 true입니다. 다음 예에서는 사용자가 마우스 버튼을 누를 때 테스트가 실행됩니다:

Rectangle {
    id: foo
    width: 640; height: 480
    color: "cyan"

    MouseArea {
        id: area
        anchors.fill: parent
    }

    property bool bar: true

    TestCase {
        name: "ItemTests"
        when: area.pressed
        id: test1

        function test_bar() {
            verify(bar)
        }
    }
}

모든 TestCase 유형이 트리거되고 실행되면 테스트 애플리케이션이 종료됩니다. optional 속성을 사용하여 TestCase 유형을 제외할 수 있습니다.

optionalcompleted참조하세요 .


windowShown : bool

이 속성은 QML 보기 창이 표시된 후에 true로 설정됩니다. 일반적으로 테스트 케이스는 테스트 애플리케이션이 로드되는 즉시 창이 표시되기 전에 실행됩니다. 테스트 케이스에 시각적 유형 및 동작이 포함된 경우에는 창이 표시될 때까지 지연되어야 할 수 있습니다.

Button {
    id: button
    onClicked: text = "Clicked"
    TestCase {
        name: "ClickTest"
        when: windowShown
        function test_click() {
            button.clicked();
            compare(button.text, "Clicked");
        }
    }
}

메서드 문서

cleanup()

이 함수는 TestCase 유형에서 실행되는 각 테스트 함수 뒤에 호출됩니다. 기본 구현은 아무 작업도 수행하지 않습니다. 애플리케이션은 각 테스트 함수 후에 정리를 수행하는 자체 구현을 제공할 수 있습니다.

init() 및 cleanupTestCase()도 참조하세요 .


cleanupTestCase()

이 함수는 TestCase 유형의 다른 모든 테스트 함수가 완료된 후에 호출됩니다. 기본 구현은 아무 작업도 수행하지 않습니다. 애플리케이션에서 자체 구현을 제공하여 테스트 케이스 정리를 수행할 수 있습니다.

initTestCase() 및 cleanup()도 참조 하세요.


compare(actual, expected, message = "")

actualexpected 과 같지 않으면 현재 테스트 케이스가 실패하고 선택 사항인 message 을 표시합니다. C++의 QCOMPARE(actual, expected) 과 유사합니다.

tryCompare() 및 fuzzyCompare도 참조하세요 .


object createTemporaryObject(Component component, object parent, object properties)

이 함수는 지정된 옵션 parentproperties 을 사용하여 주어진 component 에서 QML 객체를 동적으로 생성합니다. 반환된 객체는 cleanup() 실행이 완료된 후 (아직 생성되지 않은 경우) 소멸되므로, 이 함수로 생성된 객체는 테스트 실패 여부에 관계없이 각 테스트 후에 소멸됩니다.

객체를 생성하는 동안 오류가 발생하면 null 이 반환됩니다.

이 함수는 내부적으로 component.createObject()를 호출합니다.

Managing Dynamically Created Test Objects참조하세요 .


object createTemporaryQmlObject(string qml, object parent, string filePath)

이 함수는 지정된 qml 문자열에서 지정된 parent 을 사용하여 QML 객체를 동적으로 생성합니다. 반환된 객체는 cleanup() 실행이 완료된 후 (아직 생성되지 않은 경우) 소멸되므로 이 함수로 만든 객체는 테스트 실패 여부에 관계없이 각 테스트 후에 소멸되도록 보장됩니다.

객체를 생성하는 동안 오류가 발생하면 null 이 반환됩니다.

filePath 을 지정하면 생성된 객체에 대한 오류 보고에 사용됩니다.

이 함수는 내부적으로 Qt.createQmlObject()를 호출합니다.

Managing Dynamically Created Test Objects참조하세요 .


expectFail(tag, message)

데이터 기반 테스트에서 tag 와 연결된 행을 실패가 예상되는 것으로 표시합니다. 실패가 발생하면 message 를 표시하고 테스트를 중단한 다음 테스트를 합격으로 표시합니다. C++의 QEXPECT_FAIL(tag, message, Abort) 과 유사합니다.

테스트가 데이터 기반이 아닌 경우 tag 을 빈 문자열로 설정해야 합니다.

expectFailContinue()도 참조하세요 .


expectFailContinue(tag, message)

데이터 기반 테스트에서는 tag 와 연결된 행을 실패로 표시합니다. 실패가 발생하면 message 를 표시한 다음 테스트를 계속 진행합니다. C++의 QEXPECT_FAIL(tag, message, Continue) 과 유사합니다.

테스트가 데이터 기반이 아닌 경우 tag 을 빈 문자열로 설정해야 합니다.

expectFail()도 참조하세요 .


fail(message = "")

선택 사항으로 message 을 사용하여 현재 테스트 케이스에 실패합니다. C++의 QFAIL(message) 과 유사합니다.


[since 6.3] failOnWarning(message)

message 와 일치하는 각 경고에 대해 테스트 로그에 테스트 실패를 추가합니다. 테스트 함수는 실패가 추가되면 실행을 계속합니다.

message 는 문자열이거나 메시지 패턴을 제공하는 정규식일 수 있습니다. 후자의 경우, 각 경고가 발생할 때마다 일치하는 첫 번째 패턴이 실패를 일으키고 나머지 패턴은 무시됩니다.

모든 패턴은 각 테스트 함수가 끝날 때 지워집니다.

예를 들어, 다음 코드 조각에서 "뭔가 나쁜 일이 발생했습니다"라는 텍스트가 포함된 경고가 생성되면 테스트가 실패합니다:

failOnWarning("Something bad happened")

다음 코드조각은 주어진 패턴과 일치하는 경고가 발생하면 테스트에 실패합니다:

failOnWarning(/[0-9]+ bad things happened/)

지정된 경고를 트리거하는 모든 테스트를 실패시키려면 init()에서 이 함수에 적절한 정규식을 전달하세요:

function init() {
    failOnWarning(/.?/)
}

참고: JavaScript RegExp 객체임에도 불구하고 그렇게 해석되지 않고 대신 패턴이 QRegularExpression 으로 전달됩니다.

참고: 무시 메시지()가 이 함수보다 우선하므로 ignoreMessage()failOnWarning() 에 주어진 패턴과 일치하는 모든 경고는 무시됩니다.

이 메서드는 Qt 6.3에 도입되었습니다.

QTest::failOnWarning() 및 warn()도 참조하십시오 .


QtObject findChild(parent, objectName)

objectName 이 있는 parent 의 첫 번째 자식을 반환하거나, 그러한 항목이 없으면 null 을 반환합니다. 시각적 자식과 비시각적 자식 모두 재귀적으로 검색되며, 시각적 자식이 먼저 검색됩니다.

compare(findChild(item, "childObject"), expectedChildObject);

fuzzyCompare(actual, expected, delta, message = "")

actualexpected 의 차이가 delta 보다 크면 현재 테스트 케이스는 실패하고 선택 사항인 message 을 표시합니다. C++의 qFuzzyCompare(actual, expected) 와 유사하지만 delta 값이 필수입니다.

이 함수는 actualexpected 값을 모두 색상 값으로 변환할 수 있는 경우에도 색상 비교에 사용할 수 있습니다. RGBA 채널 값의 차이가 delta 보다 크면 테스트는 실패합니다.

tryCompare() 및 compare()도 참조하세요 .


object grabImage(item)

주어진 item 의 스냅샷 이미지 객체를 반환합니다.

반환된 이미지 객체에는 다음과 같은 속성이 있습니다:

  • width 기본 이미지의 너비를 반환합니다(5.10 이후).
  • 높이 기본 이미지의 높이를 반환합니다(5.10 이후).
  • 크기 기본 이미지의 크기를 반환합니다 (5.10 이후).

또한 반환된 이미지 객체에는 다음과 같은 메서드가 있습니다:

  • red(x, y) x, y 위치에서 픽셀의 빨간색 채널 값을 반환합니다.
  • green(x, y) x, y 위치에서 픽셀의 녹색 채널 값을 반환합니다.
  • blue(x, y) x, y 위치에서 픽셀의 파란색 채널 값을 반환합니다.
  • alpha(x, y) x, y 위치 픽셀의 알파 채널 값을 반환합니다.
  • pixel(x, y) x, y 위치에서 픽셀의 색상 값을 반환합니다.
  • equals(image) 이 이미지가 이미지와 동일한 경우 true 반환 - QImage::operator== 참조 (5.6 이후)

    예를 들어

    let image = grabImage(rect);
    compare(image.red(10, 10), 255);
    compare(image.pixel(20, 20), Qt.rgba(255, 0, 0, 255));
    
    rect.width += 10;
    let newImage = grabImage(rect);
    verify(!newImage.equals(image));
  • save(path) 지정된 경로에 이미지를 저장합니다. 이미지를 저장할 수 없으면 예외가 발생합니다. (5.10 이후)

    예를 들어 실패한 테스트에 대한 사후 분석을 수행하는 데 유용할 수 있습니다:

    let image = grabImage(rect);
    try {
        compare(image.width, 100);
    } catch (ex) {
        image.save("debug.png");
        throw ex;
    }

ignoreWarning(message)

message 을 무시된 경고 메시지로 표시합니다. 이 메시지가 발생하면 경고가 인쇄되지 않고 테스트가 통과됩니다. 메시지가 발생하지 않으면 테스트가 실패합니다. C++의 QTest::ignoreMessage(QtWarningMsg, message) 와 유사합니다.

Qt 5.12부터 message 는 문자열이거나 무시할 메시지 패턴을 제공하는 정규식일 수 있습니다.

예를 들어, 다음 코드조각은 문자열 경고 메시지를 무시합니다:

ignoreWarning("Something sort of bad happened")

그리고 다음 코드조각은 여러 가능한 경고 메시지와 일치하는 정규식을 무시합니다:

ignoreWarning(new RegExp("[0-9]+ bad things happened"))

참고: JavaScript RegExp 객체임에도 불구하고 그렇게 해석되지 않고 QRegularExpression 으로 패턴이 전달됩니다.

warn()도 참조하세요 .


init()

이 함수는 TestCase 유형으로 실행되는 각 테스트 함수 앞에 호출됩니다. 기본 구현은 아무 작업도 수행하지 않습니다. 애플리케이션에서 자체 구현을 제공하여 각 테스트 함수 전에 초기화를 수행할 수 있습니다.

cleanup() 및 initTestCase()도 참조하세요 .


initTestCase()

이 함수는 TestCase 유형의 다른 테스트 함수보다 먼저 호출됩니다. 기본 구현은 아무 작업도 수행하지 않습니다. 애플리케이션에서 테스트 케이스 초기화를 수행하는 자체 구현을 제공할 수 있습니다.

cleanupTestCase() 및 init()도 참조하세요 .


bool isPolishScheduled(object itemOrWindow)

itemOrWindowItem 인 경우, 이 함수는 polish() 에 대한 마지막 호출 이후 updatePolish() 가 호출되지 않은 경우 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

Qt 6.5부터, itemOrWindowWindow 인 경우 , 이 함수는 해당 항목에 대한 polish() 의 마지막 호출 이후 관리되는 항목에서 updatePolish() 가 호출되지 않은 경우 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

QML에서 프로퍼티에 값을 할당할 때 할당 결과로 항목이 수행해야 하는 레이아웃이 즉시 적용되지 않고 항목이 다듬어질 때까지 연기될 수 있습니다. 이러한 경우 이 함수를 사용하여 테스트 실행을 계속하기 전에 항목이 폴리싱되었는지 확인할 수 있습니다. 예를 들어

verify(isPolishScheduled(item))
verify(waitForItemPolished(item))

위의 isPolishScheduled() 호출이 없으면 waitForItemPolished() 호출은 아이템이 이미 폴리싱되었다고 가정하여 폴리싱이 예약되지 않은 것으로 보고 즉시 통과할 수 있습니다. 이 함수는 항목이 폴리싱되지 않은 이유를 명확하게 알려주며, 이러한 상황에서 테스트를 조기에 실패할 수 있도록 합니다.

waitForPolish(), QQuickItem::polish() 및 QQuickItem::updatePolish()도 참조하세요 .


keyClick(key, modifiers = Qt.NoModifier, delay = -1)

현재 초점이 맞춰진 항목에 선택 사항으로 modifiers 을 사용하여 key 을 클릭하는 것을 시뮬레이션합니다. delay 이 0보다 크면 테스트는 delay 밀리초 동안 대기합니다.

이벤트는 TestCase 창으로 전송되거나 창이 여러 개 있는 경우 현재 활성 창으로 전송됩니다. 자세한 내용은 QGuiApplication::focusWindow()를 참조하세요.

keyPress() 및 keyRelease()도 참조하세요 .


keyPress(key, modifiers = Qt.NoModifier, delay = -1)

현재 초점이 맞춰진 항목에서 선택 사항인 modifiers 을 사용하여 key 을 누르는 것을 시뮬레이션합니다. delay 이 0보다 크면 테스트는 delay 밀리초 동안 대기합니다.

이벤트는 TestCase 창으로 전송되거나 창이 여러 개 있는 경우 현재 활성 창으로 전송됩니다. 자세한 내용은 QGuiApplication::focusWindow()를 참조하세요.

참고: 어느 시점에서 keyRelease()를 사용하여 키를 해제해야 합니다.

keyRelease() 및 keyClick()도 참조하세요 .


keyRelease(key, modifiers = Qt.NoModifier, delay = -1)

현재 초점이 맞춰진 항목에 선택 사항으로 modifiers 을 사용하여 key 을 릴리스하는 시뮬레이션을 수행합니다. delay 이 0보다 크면 테스트는 delay 밀리초 동안 대기합니다.

이벤트는 TestCase 창으로 전송되거나 창이 여러 개 있는 경우 현재 활성 창으로 전송됩니다. 자세한 내용은 QGuiApplication::focusWindow()를 참조하세요.

keyPress() 및 keyClick()도 참조하세요 .


keySequence(keySequence)

keySequence 의 입력을 시뮬레이션합니다. 키 시퀀스는 standard keyboard shortcuts 중 하나로 설정하거나 최대 4개의 키 누름 시퀀스가 포함된 문자열로 설명할 수 있습니다.

각 이벤트는 TestCase 창 또는 여러 개의 창이 있는 경우 현재 활성화된 창으로 전송됩니다. 자세한 내용은 QGuiApplication::focusWindow()를 참조하세요.

keyPress(), keyRelease(), GNU Emacs Style Key Sequences, 및 Shortcut.sequence도 참조 하세요.


mouseClick(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)

item 에서 선택 사항인 modifiers 을 사용하여 마우스 button 클릭을 시뮬레이션합니다. 클릭 위치는 xy 에 의해 정의됩니다. xy 이 정의되지 않은 경우 위치는 item 의 중앙이 됩니다. delay 이 지정되면 테스트는 버튼을 누르고 놓기 전에 지정된 밀리초 동안 기다립니다.

xy 에서 지정한 위치는 item 의 좌표계에서 창 좌표로 변환된 후 전달됩니다. item 이 다른 항목에 가려지거나 item 의 하위 항목이 해당 위치를 차지하면 이벤트가 다른 항목으로 대신 전달됩니다.

mousePress(), mouseRelease(), mouseDoubleClickSequence(), mouseMove(), mouseDrag() 및 mouseWheel()도 참조하세요 .


mouseDoubleClickSequence(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)

item 에서 선택적으로 modifiers 을 사용하여 마우스 button 를 두 번 클릭하여 생성된 이벤트의 전체 시퀀스를 시뮬레이션합니다.

이 메서드는 사용자가 더블 클릭할 때 생성되는 마우스 이벤트 시퀀스를 재현합니다: 누르기-놓기-누르기-더블클릭-놓기.

클릭 위치는 xy 으로 정의됩니다. xy 이 정의되지 않은 경우 위치는 item 의 중앙이 됩니다. delay 이 지정되면 테스트는 버튼을 누르고 놓기 전에 지정된 시간(밀리초) 동안 기다립니다.

xy 에서 지정한 위치는 item 의 좌표계에서 창 좌표로 변환된 후 전달됩니다. item 이 다른 항목에 의해 가려지거나 item 의 하위 항목이 해당 위치를 차지하면 이벤트가 다른 항목으로 대신 전달됩니다.

이 QML 메서드는 Qt 5.5에 도입되었습니다.

mousePress(), mouseRelease(), mouseClick(), mouseMove(), mouseDrag(), mouseWheel()도 참조하십시오 .


mouseDrag(item, x, y, dx, dy, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)

button 을 누른 상태에서 마우스를 item 으로 드래그하고 선택적으로 modifiers 초기 드래그 위치는 xy 로 정의되며 드래그 거리는 dxdy 으로 정의됩니다. delay 을 지정하면 테스트는 버튼을 놓기 전에 지정된 시간(밀리초) 동안 기다립니다.

xy 에 지정된 위치는 item 의 좌표계에서 창 좌표로 변환된 후 전달됩니다. item 이 다른 항목에 의해 가려지거나 item 의 하위 항목이 해당 위치를 차지하면 이벤트가 다른 항목으로 대신 전달됩니다.

mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseRelease() 및 mouseWheel()도 참조하세요 .


mouseMove(item, x = item.width / 2, y = item.height / 2, delay = -1, buttons = Qt.NoButton)

마우스 포인터를 item 내에서 xy 으로 지정된 위치로 이동하고, buttons 을 누른 채로 이동합니다. Qt 6.0부터 xy 이 정의되지 않은 경우, 위치는 item 의 중심이 됩니다.

delay (밀리초 단위)가 주어지면 테스트는 마우스 포인터를 움직이기 전에 대기합니다.

xy 에서 주어진 위치는 item 의 좌표계에서 창 좌표로 변환된 후 전달됩니다. item 이 다른 항목에 의해 가려지거나 item 의 하위 항목이 해당 위치를 차지하면 이벤트가 다른 항목으로 대신 전달됩니다.

mousePress(), mouseRelease(), mouseClick(), mouseDoubleClickSequence(), mouseDrag() 및 mouseWheel()도 참조하세요 .


mousePress(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)

item 에서 선택 사항인 modifiers 을 사용하여 마우스 button 를 누르는 것을 시뮬레이션합니다. 위치는 xy 로 정의됩니다. x 또는 y 이 정의되지 않은 경우 위치는 item 의 중앙이 됩니다. delay 이 지정되면 테스트는 지정된 밀리초 동안 기다린 후 누릅니다.

xy 에서 지정한 위치는 item 의 좌표계에서 창 좌표로 변환된 후 전달됩니다. item 이 다른 항목에 의해 가려지거나 item 의 하위 항목이 해당 위치를 차지하면 이벤트가 다른 항목으로 대신 전달됩니다.

mouseRelease(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseDrag() 및 mouseWheel()도 참조하세요 .


mouseRelease(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)

item 에서 선택 사항인 modifiers 을 사용하여 마우스 button 를 놓는 것을 시뮬레이션합니다. 놓는 위치는 xy 로 정의됩니다. x 또는 y 이 정의되지 않은 경우 위치는 item 의 중앙이 됩니다. delay 이 지정되면 테스트는 버튼을 놓기 전에 지정된 시간(밀리초)을 기다립니다.

xy 에서 지정한 위치는 item 의 좌표계에서 창 좌표로 변환된 후 전달됩니다. item 이 다른 항목에 의해 가려지거나 item 의 하위 항목이 해당 위치를 차지하면 이벤트가 다른 항목으로 대신 전달됩니다.

mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseDrag() 및 mouseWheel()도 참조하세요 .


mouseWheel(item, x, y, xDelta, yDelta, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)

button 을 누른 상태에서 item 에서 마우스 휠을 회전하는 것을 시뮬레이션하고 modifiers 을 선택적으로 사용합니다. 휠 이벤트의 위치는 xy 으로 정의됩니다. delay 이 지정되면 테스트는 버튼을 놓기 전에 지정된 시간(밀리초) 동안 기다립니다.

xy 에서 지정한 위치는 item 의 좌표계에서 창 좌표로 변환된 후 전달됩니다. item 이 다른 항목에 가려지거나 item 의 하위 항목이 해당 위치를 차지하면 이벤트가 다른 항목으로 대신 전달됩니다.

xDeltayDelta 에는 휠 회전 거리가 8도 단위로 포함되어 있습니다. 자세한 내용은 QWheelEvent::angleDelta()를 참조하세요.

mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseRelease(), mouseDrag(), QWheelEvent::angleDelta()도 참조하세요 .


skip(message = "")

현재 테스트 케이스를 건너뛰고 선택 사항인 message 을 인쇄합니다. 데이터 기반 테스트인 경우 현재 행만 건너뜁니다. C++의 QSKIP(message) 와 유사합니다.


sleep(ms)

Qt 이벤트를 처리하지 않고 ms 밀리초 동안 잠듭니다.

wait() 및 waitForRendering()도 참조하십시오 .


TouchEventSequence touchEvent(object item)

시뮬레이션된 터치스크린을 통해 일련의 터치 이벤트를 시작합니다 (QPointingDevice). 이벤트는 item 을 포함하는 창으로 전달됩니다.

반환된 객체는 단일 QTouchEvent 을 통해 전달할 이벤트를 열거하는 데 사용됩니다. 터치는 달리 지정되지 않는 한 TestCase 이 포함된 창으로 전달됩니다.

Rectangle {
    width: 640; height: 480

    MultiPointTouchArea {
        id: area
        anchors.fill: parent

        property bool touched: false

        onPressed: touched = true
    }

    TestCase {
        name: "ItemTests"
        when: windowShown
        id: test1

        function test_touch() {
            let touch = touchEvent(area);
            touch.press(0, area, 10, 10);
            touch.commit();
            verify(area.touched);
        }
    }
}

TouchEventSequence::press(), TouchEventSequence::move(), TouchEventSequence::release(), TouchEventSequence::stationary(), TouchEventSequence::commit() 및 QInputDevice::DeviceType참조하세요 .


tryCompare(obj, property, expected, timeout = 5000, message = "")

obj 에 지정된 propertyexpected 과 같지 않으면 현재 테스트 케이스에 실패하고 선택 사항인 message 을 표시합니다. timeout (밀리초 단위)에 도달할 때까지 테스트가 여러 번 다시 시도됩니다.

이 함수는 비동기 이벤트에 따라 프로퍼티 값이 변경되는 애플리케이션을 테스트하기 위한 것입니다. 동기식 속성 변경을 테스트하려면 compare()를 사용하세요.

tryCompare(img, "status", BorderImage.Ready)
compare(img.width, 120)
compare(img.height, 120)
compare(img.horizontalTileMode, BorderImage.Stretch)
compare(img.verticalTileMode, BorderImage.Stretch)

SignalSpy::wait()는 신호가 전송될 때까지 기다리는 대체 방법을 제공합니다.

compare() 및 SignalSpy::wait()도 참조하세요 .


tryVerify(function, timeout = 5000, message = "")

지정된 timeout (밀리초)가 경과하기 전에 functiontrue 로 평가되지 않으면 현재 테스트 케이스는 실패합니다. 이 함수는 시간 초과에 도달할 때까지 여러 번 평가됩니다. 실패 시 message (선택 사항)가 표시됩니다.

이 함수는 비동기 이벤트에 따라 조건이 변경되는 애플리케이션을 테스트하기 위한 것입니다. 동기식 조건 변경을 테스트하려면 verify(), 비동기식 속성 변경을 테스트하려면 tryCompare()을 사용합니다.

예를 들어, 아래 코드에서는 currentItem 속성이 짧은 기간 동안 null 일 수 있으므로 tryCompare()를 사용할 수 없습니다:

tryCompare(listView.currentItem, "text", "Hello");

대신 tryVerify()를 사용하여 currentItemnull 이 아닌지 먼저 확인한 다음 나중에 일반 비교를 사용할 수 있습니다:

tryVerify(function(){ return listView.currentItem })
compare(listView.currentItem.text, "Hello")

verify(), compare(), tryCompare() 및 SignalSpy::wait()도 참조하세요 .


verify(condition, message = "")

condition 이 거짓이면 현재 테스트 케이스가 실패하고 선택 사항인 message 을 표시합니다. C++의 QVERIFY(condition) 또는 QVERIFY2(condition, message) 과 유사합니다.


wait(ms)

Qt 이벤트를 처리하는 동안 ms 밀리초 동안 기다립니다.

참고: 이 메서드는 정확한 타이머를 사용하여 실제 대기를 수행합니다. 대기 중인 이벤트는 그렇지 않을 수도 있습니다. 특히 Timer QML 유형뿐만 아니라 모든 애니메이션은 다양한 요소에 따라 정밀한 타이머 또는 거친 타이머를 사용할 수 있습니다. 거친 타이머의 경우 TestCase::wait()에서 사용하는 정밀 타이머와 관련하여 약 5%의 드리프트를 예상해야 합니다. 하지만 운영체제는 일반적으로 타이머에 대한 하드 보장을 제공하지 않기 때문에 Qt는 드리프트에 대한 하드 보장을 제공할 수 없습니다.

sleep(), waitForRendering() 및 Qt::TimerType참조하십시오 .


[since 6.5] bool waitForPolish(object windowOrItem, int timeout = 5000)

windowOrItem 이 Item이면 timeout 밀리초 동안 또는 isPolishScheduled(windowOrItem)false 을 반환할 때까지 기다립니다. isPolishScheduled(windowOrItem)timeout 밀리초 이내에 false 을 반환하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

windowOrItem 이 창이면 timeout 밀리초 동안 또는 isPolishScheduled() 이 창에서 관리하는 모든 항목에 대해 false 을 반환할 때까지 기다립니다. isPolishScheduled()timeout 밀리초 이내에 모든 항목에 대해 false 을 반환하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

이 메서드는 Qt 6.5에 도입되었습니다.

isPolishScheduled(), QQuickItem::polish() 및 QQuickItem::updatePolish()도 참조하십시오 .


waitForRendering(item, timeout = 5000)

timeout 밀리초 동안 또는 렌더러에서 item 이 렌더링될 때까지 기다립니다. timeout 밀리초 내에 item 가 렌더링되면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다. 기본값 timeout 값은 5000입니다.

sleep() 및 wait()도 참조하세요 .


warn(message)

message 을 경고 메시지로 출력합니다. C++의 qWarning(message) 와 유사합니다.

ignoreWarning()도 참조하세요 .


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