Я пишу модульный тест с QTest для устаревшего кода, например:
#include <QTimer>
class MyObject: public QObject{
public:
void foo(){
t1.start(500);
}
private:
QTimer t1{this};
};
И хочу имитировать QTimer, а затем проверить, правильно ли вызывается QTimer::start(int)
. Я пробовал несколько подходов. Внедрение зависимостей с помощью шаблона template<typename TIMER = QTimer> class MyObjecr: public QObject
, но получение
Классы шаблонов, не поддерживаемые Q_OBJECT
И LD_PRELOAD = libQTimerMock.so с простой повторной реализацией QTimer.
class QTimer : public QObject
{
signals:
void onStarted(int);
public slots:
void start(int i)
{
emit onStarted(i);
}
};
Что с QMetaObject mag ie на самом деле РАБОТАЕТ .
Есть ли более простой способ? Некоторое время компиляции включает инъекцию? Итак, #include <QTimer>
для MyObject.h использует фиктивный файл, а остальная часть спагетти остается неизменной?