Макет нового оператора в c ++ с использованием GMOCK

Есть ли способ фиктивный новый оператор или перегруженный новый оператор в C ++ с использованием GMOCK.
Например:

ptr = new Base;
ret = ptr->call();

Здесь мне нужно, чтобы ptr вызывал mocked-функцию, но ptr получает память, используя new, так что я могу здесь что-нибудь сделать, чтобы mock new.

2

Решение

Бывают моменты, когда приходится делать глупости и покончить с этим.

Издеваться над оператором newВы можете перегрузить его: https://en.cppreference.com/w/cpp/memory/new/operator_new

Вы можете издеваться над бесплатными функциями, такими как new реализация путем создания отдельного класса для свободных функций и построена в глобальной области видимости.

Существует проблема с простым издевательством над new оператор, однако, так как библиотека Google Test также использует его. Чтобы это работало для всех случаев new, заставить его динамически изменять свое поведение с помощью переменной. Измените эту переменную в тесте, чтобы включить насмешку.

Чтобы сложить все вместе, это должно выглядеть так:

class MockFunctions
{
public:
MOCK_CONST_METHOD1( newAllocate, void*( size_t ) );

bool mockAllocation = false;
} mockFunctions;

void* operator new[]( size_t count )
{
if ( mockFunctions.mockAllocation )
return mockFunctions.newAllocate( count );

else
return std::malloc(count);
}

Если вы можете изменить тестируемый исходный код, попробуйте использовать контейнеры STL, такие как массив и вектор, чтобы упростить жизнь в 100 раз.

0

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

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

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