Глава 4: Воспроизведение событий ГПИФайлы: В этой главе мы покажем, как имитировать события ГПИ и как сохранить последовательность событий ГПИ, а также воспроизвести их на виджете. Подход к сохранению последовательности событий и их последующему воспроизведению очень похож на подход, описанный в главе 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(): список событий ГПИ и ожидаемый результат применения списка событий на QWidget. Заметьте, что тип первого элемента - QTestEventList. QTestEventList может быть заполнен событиями ГПИ, которые могут быть сохранены как тестовые данные для дальнейшего использования или воспроизведены на любом QWidget. В нашей текущей функции данных мы создаём два QTestEventList. Первый список состоит из единственного нажатия на кнопку 'a'. Мы добавили событие к списку при помощи функции QTestEventList::addKeyClick(). Затем мы использовали функцию QTest::newRow(), чтобы дать набору данных имя и передать в таблицу список событий и ожидаемый результат. Второй список содержит два нажатия клавиш: 'a' с последующим 'backspace'. Мы опять же используем 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. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |