模拟GUI事件

最后更新于:2022-04-02 02:10:10

[TOC] ## 模拟GUI事件 QTestLib发送内部Qt事件,而不是模拟本地窗口系统事件,因此运行测试程序不会对机器产生任何副作用 测试文件: 与数据测试不同,需要引入 `QtGuid` ``` #include #include class TestGui: public QObject { Q_OBJECT private slots: void testGui(); }; void TestGui::testGui() { QLineEdit lineEdit; // 模拟按键,输入 hello word,可以指定延迟时间 QTest::keyClicks(&lineEdit, "hello world"); QCOMPARE(lineEdit.text(), QString("hello world")); } ``` ## 批量测试 ``` class TestGui: public QObject { Q_OBJECT private slots: void testGui_data(); void testGui(); }; ... void TestGui::testGui_data() { QTest::addColumn("events"); QTest::addColumn("expected"); QTestEventList list1; list1.addKeyClick('a'); QTest::newRow("char") << list1 << "a"; // 先点击a,在点击backspace QTestEventList list2; list2.addKeyClick('a'); list2.addKeyClick(Qt::Key_Backspace); QTest::newRow("there and back again") << list2 << ""; } ... void TestGui::testGui() { QFETCH(QTestEventList, events); QFETCH(QString, expected); QLineEdit lineEdit; // 在控件上触发事件队列 events.simulate(&lineEdit); QCOMPARE(lineEdit.text(), expected); } ```
';