Насмешка над классом с приватным Конструктором с использованием GMOCK

У меня есть класс Singleton с закрытыми Ctor, Dtor и один метод getInstance ().

class Single {
public:
virtual void* alloc(size_t size, uint line){}
Single* getInstance() {
if(!m_Instance)
m_Instance = __OSAL_NEW OSAL_Memory;
return m_Instance;
}
private:
Single();
~Single();
static Single* m_Instance;
};#define Allocate(size_t size)\
(Single::getInstance())->alloc(size, __LINE__)

Мне нужно издеваться над этим классом, используя GMOCK.
Есть ли способ посмеяться над этим.

2

Решение

Вы могли бы использовать заводская модель создать свой объект.

#include <iostream>
#include <functional>

struct A
{
virtual ~A(){}

virtual void foo() = 0;
};

struct Areal : A
{
virtual void foo(){
std::cout<<"real"<<std::endl;
}
};

struct Amock : A
{
virtual void foo(){
std::cout<<"mock"<<std::endl;
}
};

struct Single
{
typedef std::function< A*() > CreatorFn;

static A* getInstance(){
if ( ! instance() )
instance() = (create())();
return instance();
}

static void setCreator( CreatorFn newFn ){
create() = newFn;
}

private:

static CreatorFn& create(){
static CreatorFn f( [](){return new Areal;} );
return f;
}
static A*& instance(){
static A* p=nullptr;
return p;
}
};bool useMock = true;

int main()
{
if ( useMock )
{
Single::CreatorFn mockFn( [](){ return new Amock; } );
Single::setCreator( mockFn );
}

Single::getInstance()->foo();
}

Вы просто должны убедиться, что вы установили создатель до доступ к экземпляру. В противном случае будет создана функция создания по умолчанию.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]