❝本示例是一个测试工程示例。介绍如何模拟GUI事件,以及如何储存一系列GUI事件并在某个小部件(QWidget)上重播它们。 ❞
- 将数据函数添加到测试类中:
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
宏来检查行编辑的文本是否符合预期。
要使我们的测试用例成为独立的可执行文件,需要执行以下两行:
代码语言:javascript复制QTEST_MAIN(TestGui)
#include "testgui.moc"
该QTEST_MAIN
运行所有测试功能,并且因为两者的声明和我们的测试类的实现是在一个.cpp
文件宏展开为一个简单的main函数,我们还需要包括生成的moc文件,以使Qt的自省工作。
关于更多
- 在「QtCreator软件」可以找到:
- 或在以下「Qt安装目录」找到:
C:Qt{你的Qt版本}Examples{你的Qt版本}qtestlibtutorial4
- 「相关链接」
https://doc.qt.io/qt-5/qttestlib-tutorial4-example.html