Есть ли способ фиктивный новый оператор или перегруженный новый оператор в C ++ с использованием GMOCK.
Например:
ptr = new Base;
ret = ptr->call();
Здесь мне нужно, чтобы ptr вызывал mocked-функцию, но ptr получает память, используя new, так что я могу здесь что-нибудь сделать, чтобы mock new.
Бывают моменты, когда приходится делать глупости и покончить с этим.
Издеваться над оператором 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 раз.
Других решений пока нет …