什么是 qmltestrunner?

121*_*8GG 5 qt unit-testing qml

我已经阅读了 Qt 在TestCase上提供的文档、Qt 快速测试参考文档Ubuntu QML 单元测试使用 qmltestrunner 第 1 和 2 部分进行测试编写和运行 qml 测试用例如何创建 Qt 快速测试

我所发现的一切是:

Qmltestrunner 是一个用于单元测试的工具。该工具允许将 QML 文件作为测试用例执行。这些文件应包含 test_functions。Qmltestrunner是一个开源项目,其源代码可以在github上找到。

但我正在寻找几个问题的答案:

  1. qmltestrunner 文档?我在哪里可以找到它?(找不到它的维基页面)

  2. qmltestrunner 是 qt 快速测试框架的一部分吗?

  3. qmltestrunner 有哪些依赖项?

  4. 有没有合适的例子可以让我找到有关 QML 单元测试的完整解释?qt 快速测试框架解释了我无法理解的运行测试。

谢谢

mcc*_*chu 5

  1. 不幸的是,没有qmltestrunner的文档(我没有)。如果您只想知道如何使用它,qmltestrunner.exe -h可能会对您有所帮助。大多数选项在Qt 测试概述中进行了描述。
  2. 是的。Qt 快速测试参考文档 - 运行测试表示您需要一个包含.cpp文件QUICK_TEST_MAIN(xxx)和一个包含 的.proCONFIG += qmltestcase文件,并构建此项目来运行 QML 单元测试。该项目的输出二进制文件是(几乎相同)qmltestrunner
  3. 要运行qmltestrunner(例如,在带有 Qt 5.7 的 Windows 中),您至少需要以下模块:Qt5Core.dll, Qt5Gui.dll, Qt5Network.dll, Qt5Qml.dll, Qt5Quick.dll, Qt5QuickTest.dll, Qt5Test.dll, Qt5Widget.dll。如果需要的话,还有一些用于 QML 文件的额外模块(例如QtQuick Controls 2
  4. TestCase描述如何在 QML 中编写单元测试。要运行该文件,只需qmltestrunner.exe -input C:\My\Testing\File\Path\tst_myComponentTest.qml在命令行中运行即可。

以下是有关如何使用单元测试编写 QML 组件的简单分步示例。例如,假设我们有一个ExpandButton单击时会展开的 a:

//ExpandButton.qml
import QtQuick 2.7
import QtQuick.Controls 1.2

Button {
    width: 50; height: 50
    onClicked: { width = 100; }
}
Run Code Online (Sandbox Code Playgroud)

要测试此行为,请编写tst_ExpandButton.qml

import QtQuick 2.7
import QtTest 1.0

Item {
    width: 800; height: 600

    ExpandButton {
        id: expandButton
        anchors.centerIn: parent
    }

    TestCase {
        name: "ExpandButton"; when: windowShown

        function test_clickToExpand() {
            var widthBeforeClick = expandButton.width;
            mouseClick(expandButton);
            var widthAfterClick = expandButton.width;
            verify(widthBeforeClick < widthAfterClick);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我们有两个 QML 文件,ExpandButton.qml以及tst_ExpandButton.qml. 运行单元测试qmltestrunner.exe -input D:\aaa\bbb\tst_ExpandButton.qml,您可以看到结果:

********* Start testing of qmltestrunner *********
Config: Using QtTest library 5.7.0, Qt 5.7.0 (i386-little_endian-ilp32 shared (dynamic) release build; by MSVC 2015)
PASS   : qmltestrunner::ExpandButton::initTestCase()
PASS   : qmltestrunner::ExpandButton::test_clickToExpand()
PASS   : qmltestrunner::ExpandButton::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 13ms
********* Finished testing of qmltestrunner *********
Run Code Online (Sandbox Code Playgroud)


man*_*pak 1