С момента обновления структуры GTEST от 1.8.x до 1.12.x было несколько тестов, в которых сообщалось о утечках памяти в конце теста. < /p>
Я лишил все Сложность наших настройки к примеру ниже и проверила его на старой структуре и новой. Этот образец не показывает утечки памяти в старом, теперь он. Похоже, это вызвано функциональным вызовом, сделанным на макете, для которого нет явного ожидания. br /> Макет в нашем исходном коде была статической vared_ptr, но делая его членом класса или переменной стека в тесте, не исправляйте проблему. < /p>
Совместное распределение, по-видимому, является экземпляром Underdered_map внутри 'uninterestingCallReactionMap ()' in gmock-spec-builders.cc < /p>
using namespace testing;
class IFoo
{
public:
IFoo() = default;
virtual ~IFoo() = default;
virtual bool closeLink(void) = 0;
};
class MockFoo : public IFoo
{
public:
MOCK_METHOD0(closeLink, bool());
};
class MemLeakReproTest : public Test
{
};
TEST_F(MemLeakReproTest, TestStuff)
{
MockFoo mockFoo;
//EXPECT_CALL(mockFoo, closeLink()).Times(1).WillOnce(Return(true));
mockFoo.closeLink();
}
< /code>
Изменить: добавлено в ответ на вопрос о том, как мы обнаруживаем утечки. Запуск в Windows).
Наша настройка в основной правильной? < /p>
{
// Enable leak checking on exit
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
// Write CRT warnings to stderr
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
wchar_t filename[MAX_PATH] = {};
wcscpy_s(filename, *wargv);
wcscat_s(filename, L".memleaks");
hLogFile = CreateFile(filename, GENERIC_WRITE,
FILE_SHARE_READ, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
_CrtSetReportHook(reportHook);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
testing::InitGoogleTest(&argc, argv);
int result = RUN_ALL_TESTS();
LocalFree(wargv);
return result;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... nce-update