Этот класс не является моим кодом, а является частью Qt Framework и называется QProcess. .
В моем тестируемом классе QProcess вызывался следующим образом:
Код: Выделить всё
QProcess * p;
p = new QProcess;
QString cmd = "ls -lah";
p.start(cmd);
Я сделал это следующим образом: я определил интерфейс IQProcess и реализовал его один раз с помощью макетного класса QProcessMock и один раз с чем-то вроде оболочки, которая просто перенаправляет имитируемые методы в исходный QProcessWrapper.
Итак, мой рабочий код теперь будет таким:
Код: Выделить всё
IQProcess * p;
p = new QProcessWrapper();
QString cmd = "ls -lah";
p->start(cmd);
Это мои классы:
интерфейс
Код: Выделить всё
class IQProcess : public QObject {
Q_OBJECT
public:
virtual ~IQProcess() = default;
virtual void start(const QString &program) = 0;
virtual bool startDetached(const QString &program) = 0;
};
#endif // IQPROCESS_H
Код: Выделить всё
#ifndef QPROCESSMOCK_H
#define QPROCESSMOCK_H
#include
#include "IQProcess.h"
#include
class QProcessMock : public IQProcess {
Q_OBJECT
public:
MOCK_METHOD(void, start, (const QString &program), (override));
MOCK_METHOD(bool, startDetached, (const QString &program), (override));
};
#endif // QPROCESSMOCK_H
Код: Выделить всё
#ifndef QPROCESSWRAPPER_H
#define QPROCESSWRAPPER_H
#include "IQProcess.h"
#include
class QProcessWrapper : public QProcess, public IQProcess {
public:
void start(const QString &program) override {
QProcess::start(program);
} //
Подробнее здесь: [url]https://stackoverflow.com/questions/78549774/multiple-inheritance-use-one-method-in-child[/url]