Как я могу исправить утечку памяти в тесте Gmock, когда сопоставление используется для аргумента функции, который является умным указателем? - PullRequest
0 голосов
/ 06 марта 2020

Итак, у меня есть фрагмент кода для большого тестового кода, не написанный мной, но мне нужно отладить утечку в:

TEST_F(LeakChecked, PurgeNotify)
{
    AsyncManager asyncManager;
    DataIndexer indexer(*logger_, asyncManager);

    //....

    EXPECT_CALL(
        asyncManager,
        RunAsync(
            AllOf(
                EventType("DataPurged"),
                EventTime(0),
                EventJson(
                    R"({"bucket":"dropped_files","data":{"path":"c:\\foo\\test.exe"},"time":0,"type":"DataPurged"})"),
                EventCoverage()),
            _,
            0,
            0));

    //...

    Mock::VerifyAndClearExpectations(&asyncManager);
}

В приборе используются Windows '_CrtMemCheckpoint и другие функции обнаружить утечки памяти в своем деструкторе. У меня было около 6 утечек, и после добавления _CrtSetBreakAllo c, чтобы разбить их, оказалось, что все они указывают на вышеупомянутый макрос EXPECT_CALL.

RunAsyn c - это метод, первым аргументом которого является std :: shared_ptr, но ни одна из утечек не указывает на утечку указанного объекта, вместо этого распределение происходит в gmock-matchers.h, где он выделяет Matcher<T> с новым.

В других темах, которые я читал что вызов VerifyAndClearExpectations должен работать, но в моем случае утечка сохраняется.

Могу ли я что-то исправить, или я просто должен устранить утечки?

...