Как протестировать соединения сигнал-слот с помощью qtest

Я только начинаю работать с QT и хотел бы иметь модульные тесты. Я нашел схему структуры проекта, которая поддерживает тестирование вне моего приложения.

Для моего первого теста я хотел щелкнуть пункт меню «Выход», чтобы проверить, действительно ли вызывается действие закрытия QMainWindow.

Исходя из Java со всеми его насмешливыми фреймворками, вот что я хотел бы сделать:

  1. Имитировать нажатие на меню (или нажатие клавиши)
  2. Нажмите «Выход» (или нажмите клавишу)
  3. Убедитесь, что сигнал «triggered ()» QAction был отправлен
  4. Убедитесь, что слот "закрыть" QMainWindow был вызван

Я прочитал учебник по qtest, документацию по KDE и другие материалы в сети, но я не могу выразить это с помощью qtest (пока).

Я нашел пользовательский интерфейс Qt тестирование: Как имитировать щелчок по элементу QMenuBar с помощью QTest?, который описывает аналогичную вещь, но даже там покрыты только 1, 2, 3 (и я даже не смог заставить их работать).

Итак, как я могу написать такой тестовый пример? Это вообще возможно?


person Christian Kalkhoff    schedule 29.08.2015    source источник


Ответы (1)


Для тестирования сигнала можно использовать класс QSignalSpy http://doc.qt.io/qt-5/qsignalspy.html

Но вы хотите протестировать все приложение, а не отдельный модуль. Для этого лучше подходят инструменты тестирования пользовательского интерфейса, такие как squish или ranorex (оба коммерческие).

person Gusch5    schedule 30.08.2015
comment
Я действительно узнал о QSignalSpy, но это только половина сигнального слота. :) Я также пытался переопределить мой MainWindow тестовой версией close, но поскольку метод не определен виртуальным, он тоже не работает. - person Christian Kalkhoff; 30.08.2015