Home

[Previous: Chapter 2] [Contents] [Next: Chapter 4]

Chapter 3: Simulating GUI Events

Files:

QtTest features some mechanisms to test graphical user interfaces. Instead of simulating native window system events, QtTest sends internal Qt events. That means there are no side-effects on the machine the tests are running on.

In this chapter we will se how to write a simple GUI test.

Writing a GUI test

This time, let's assume you want to test the behavior of our QLineEdit class. As before, you will need a class that contains your test function:

    #include <QtGui>
    #include <QtTest>

    class TestGui: public QObject
    {
        Q_OBJECT

    private slots:
        void testGui();

    };

The only difference is that you need to include the QtGui class definitions in addition to the QtTest namespace.

    void TestGui::testGui()
    {
        QLineEdit lineEdit;

        QtTest::keyClicks(&lineEdit, "hello world");

        COMPARE(lineEdit.text(), QString("hello world"));
    }

In the implementation of the test function we first create a QLineEdit. Then we simulate writing "hello world" in the line edit using the QtTest::keyClicks() function.

QtTest::keyClicks() simulates clicking a sequence of keys on a widget. Optionally, a keyboard modifier can be specified as well as a delay (in milliseconds) of the test after each key click. In a similar way, you can use the QtTest::keyClick(), QtTest::keyPress(), QtTest::keyRelease(), QtTest::mouseClick(), QtTest::mouseDClick(), QtTest::mouseMove(), QtTest::mousePress() and QtTest::mouseRelease() functions to simulate the associated GUI events.

Finally, we use the COMPARE() macro to check if the line edit's text is as expected.

As before, to make our test case a stand-alone executable, the following two lines are needed:

    QTTEST_MAIN(TestGui)
    #include "testgui.moc"

The QTTEST_MAIN() macro expands to a simple main() method that runs all the test functions, and since both the declaration and the implementation of our test class are in a .cpp file, we also need to include the generated moc file to make Qt's introspection work.

[Previous: Chapter 2] [Contents] [Next: Chapter 4]


Copyright © 2008 Nokia Corporation and/or its subsidiary(-ies) Trademarks
Qt Solutions