0
点赞
收藏
分享

微信扫一扫

第四章 复现GUI事件

青乌 2022-04-01 阅读 45

如何复现GUI事件。  (replay,有翻译重播,重现,我和测试之间经常说的是复现,就翻译成这个了)

在本章中,我们将展示如何模拟GUI事件,以及如何存储一系列GUI事件,并在一个小部件上复现它们。

存储一系列事件并复现它们的方法与第2章中解释的方法非常相似。你需要做的就是在你的测试类中添加一个数据函数:

class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui_data();
    void testGui();
};

编写数据函数

与前面一样,测试函数的相关数据函数具有相同的名称,后面附加_data。

void TestGui::testGui_data()
{
    QTest::addColumn<QTestEventList>("events");
    QTest::addColumn<QString>("expected");

    QTestEventList list1;
    list1.addKeyClick('a');
    QTest::newRow("char") << list1 << "a";

    QTestEventList list2;
    list2.addKeyClick('a');
    list2.addKeyClick(Qt::Key_Backspace);
    QTest::newRow("there and back again") << list2 << "";
}

首先,我们使用QTest::addColumn()函数定义表的元素:GUI事件列表,以及在QWidget上应用事件列表的预期结果。注意,第一个元素的类型是QTestEventList。

QTestEventList可以用GUI事件填充,这些事件可以存储为测试数据以供以后使用,或者在任何QWidget上复现。

在当前的数据函数中,我们创建了两个QTestEventList元素。第一个列表由单击“a”键组成。我们使用QTestEventList::addKeyClick()函数将事件添加到列表中。然后,我们使用QTest::newRow()函数为数据集指定一个名称,并将事件列表和预期结果流到表中。

第二个列表包含两个键的点击:一个“a”和后面的“退格”。同样,我们使用QTestEventList::addKeyClick()将事件添加到列表中,并使用QTest::newRow()将事件列表和预期结果放入具有关联名称的表中。

重写测试函数

我们的测试现在可以重写:

void TestGui::testGui()
{
    QFETCH(QTestEventList, events);
    QFETCH(QString, expected);

    QLineEdit lineEdit;

    events.simulate(&lineEdit);

    QCOMPARE(lineEdit.text(), expected);
}

TestGui:: TestGui()函数将被执行两次,对于我们在相关的TestGui::testGui_data()函数中创建的测试数据中的每个条目,执行一次。

首先,我们使用QFETCH()宏获取数据集的两个元素。QFETCH()接受两个参数:元素的数据类型和元素名称。然后,我们创建QLineEdit,并使用QTestEventList::simulate()函数在小部件上应用事件列表。

最后,我们使用QCOMPARE()宏来检查行编辑的文本是否符合预期。

和前面一样,要使我们的测试用例成为一个独立的可执行文件,需要以下两行代码:

QTEST_MAIN(TestGui)
#include "testgui.moc"

宏QTEST_MAIN()扩展为一个简单的main()方法,它运行所有的测试函数,由于我们的测试类的声明和实现都在一个.cpp文件中,我们还需要包含生成的moc文件,以使Qt进行自测工作。

举报

相关推荐

第四章

第四章总结

第四章:表

第四章、数组

第四章:Hbase

0 条评论