Множественное наследование, используйте один метод в дочернем элементеC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Множественное наследование, используйте один метод в дочернем элементе

Сообщение Anonymous »

В CPP, gTest (версия не имеет большого значения) у меня есть класс, который я хотел бы отслеживать в своих модульных тестах.
Этот класс не является моим кодом, а является частью Qt Framework и называется QProcess. .
В моем тестируемом классе QProcess вызывался следующим образом:

Код: Выделить всё

QProcess * p;
p = new QProcess;
QString cmd = "ls -lah";
p.start(cmd);
По сути, я хочу, чтобы gMock мог сообщать мне, когда-либо участник, например. Вызывается QProcess::start этого класса.
Я сделал это следующим образом: я определил интерфейс IQProcess и реализовал его один раз с помощью макетного класса QProcessMock и один раз с чем-то вроде оболочки, которая просто перенаправляет имитируемые методы в исходный QProcessWrapper.
Итак, мой рабочий код теперь будет таким:

Код: Выделить всё

IQProcess * p;
p = new QProcessWrapper();
QString cmd = "ls -lah";
p->start(cmd);
Во время UnitTests я обмениваюсь p с экземпляром QProcessMock.
Это мои классы:
интерфейс

Код: Выделить всё

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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»