第四章 复现GUI事件

本文详细介绍了如何在Qt中存储和复现GUI事件。通过使用QTestEventList,可以创建事件序列,然后在测试类中应用这些事件到特定的小部件,如QLineEdit,以验证其行为。测试数据包含事件列表和预期结果,通过QFETCH宏获取并在测试函数中使用QTestEventList::simulate()方法模拟事件。最后,使用QCOMPARE宏比较实际结果与预期相符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何复现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进行自测工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值