Qt Quick的单元测试



我对Qt和Qt Quick很陌生。我正在验证Qt Quick的Qt测试单元测试框架,但我不知道如何运行测试。以下是我所拥有的,我创建了一个具有以下结构的SUBDIRS项目:

ProjectSolution
   ProjectSolution.pro
   Project
      Project.pro
      Sources/main.cpp
      Resources/qml.qrc/main.qml
   ProjectTest
      ProjectTest.pro
      Sources/main.cpp
      Resources/qml.qrc/main.qml
      Resources/qml.qrc/tst_gui.qml

"Project"是要测试的应用程序,我的测试用例在"ProjectTest/Resources/qml.qrc/tst_gui.qml"中。

tst_gui.qml:

import QtQuick 2.5
import QtTest 1.0
TestCase {
    name: "UI Testcase"
    when: windowShown
function test_button_click() {
    mouseClick(click_button, Qt.LeftButton, Qt.NoModifier)
}
function test_key_press() {
    keyClick(Qt.Key_Left)
    keyClick("a")
    }
}

我在"Project/Resources/qml.qrc/main.qml"中有一个id为"click_Button"的按钮,我想模拟它。当我运行测试项目时,我收到了失败的消息:

FAIL!  : tst_gui::UI Testcase::test_button_click() Uncaught exception: click_button is not defined
C:UserssjayaprakashQt Test ProjectsQt Test ValidationQtTestValidation6QtTestValidation6Testtst_gui.qml(9) : failure location

我确信我做错了什么。有人能帮忙吗?

终于,我能够让它工作了。测试用例找不到按钮,因为它在另一个QML文件中。我尝试导入和使用属性别名,但都不起作用。我将所有内容都复制到了tst_gui.qml中(使main.qml为空),现在运行良好。

tst_gui.qml(更新):

import QtTest 1.0
import QtQuick 2.5
import QtQuick.Window 2.0
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.2
import QtQml 2.2

Rectangle {
    id: main_window
    visible: true
    width: Screen.width/2
    height: Screen.height/2
    color: "light grey"
    Rectangle {
        property alias click_button: click_button
        id: click_button
        width: main_window.width/4
        height: main_window.height/14
        color: "blue"
        x: main_window.width/2 - click_button.width/2
        y: main_window.height/2 - main_window.height/4
        Text {
            id: button_text
            text: qsTr("Click!")
            font.pointSize: 24
            color: "white"
            anchors.horizontalCenter: parent.horizontalCenter
            anchors.verticalCenter: parent.verticalCenter
        }
        MouseArea {
            anchors.fill: parent
            onClicked: {
                //Log to console as a proof of button click simulation
                console.log("Button was clicked!")
            }
        }
    }
    TextArea {
        id: textarea
        width: main_window.width/2
        height: main_window.height/8
        x: main_window.width/2 - textarea.width/2
        y: (main_window.height/2 - textarea.height/2) + main_window.height/8
        focus: true
        selectByKeyboard: true
        textColor: "darkblue"
        textFormat: TextEdit.PlainText
        wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
        Keys.onLeftPressed: {
            //Log to console as a proof of key press simulation
            console.log("Left key was pressed!")
        }
    }

    TestCase {
        name: "UI Testcase"
        when: windowShown
        function test_button_click() {
            mouseClick(click_button, Qt.LeftButton, Qt.NoModifier)
        }
        function test_key_press() {
            keyClick(Qt.Key_Left)
        }
    }
}

在我的main.cpp中,我只是调用宏:

QUICK_TEST_MAIN("tst_gui")

编写单元测试的正确方法可能是将它们与实际代码分开。目前,这对我来说很有效。

相关内容

  • 没有找到相关文章

最新更新