Chapter 3: Simulating GUI Events
Qt Test 具有一些测试图形用户界面的机制. Qt Test 发送 Qt 内部事件, 而不是模拟本机窗口系统事件. 这意味着运行测试的机器不会产生副作用.
在本章中, 我们将看到如何编写一个简单的 GUI 测试.
编写一个GUI测试
这次, 假设你想测试 QLineEdit 的行为. 和以前一样, 需要一个包含测试函数的类:
#include <QtWidgets> #include <QtTest/QtTest> class TestGui: public QObject { Q_OBJECT private slots: void testGui(); };
唯一的区别是, 除了 QTest 命名空间之外, 你还需要包含 Qt GUI 类定义.
void TestGui::testGui() { QLineEdit lineEdit; QTest::keyClicks(&lineEdit, "hello world"); QCOMPARE(lineEdit.text(), QString("hello world")); }
在测试函数中, 我们首先创建一个QLineEdit. 然后我们使用QTest::keyClicks()函数模拟用户在QLineEdit中写入" hello world ".
注意: 我们必须显示widget, 才能正确测试键盘快捷键.
QTest::keyClicks() 模拟单击widget上得一系列按键. 这个函数还可以指定键盘修饰键及每次按键后的延迟时间(单位: ms). 以类似的方式, 你可以使用QTest::keyClick(), QTest::keyPress(), QTest::keyRelease(), QTest::mouseClick(), QTest::mouseDClick(), QTest::mouseMove(), QTest::mousePress(), QTest::mouseRelease()等相关函数模拟GUI事件.
最后, 我们使用QCOMPARE()宏检测QLineEdit的文本是否是所期望的.
同样, 为了使我们的测试用例成为独立的可执行文件, 需要以下两行:
QTEST_MAIN(TestGui)
#include "testgui.moc"
和以前一样, QTEST_MAIN() 宏扩展为一个简单的main()方法, 这个方法运行所有测试函数, 并且由于我们的测试类的声明和实现都在 .cpp 文件中, 因此我们还需要包含生成的 moc 文件以使 Qt 的自省工作.
文件: