У меня есть метод в классе, который очищает память, используя CoTaskMemFree:Google Mock - Тест возвращается без результата при использовании CoTaskMemFree
HRESULT A::doStuff() {
PWSTR protectedPassword = L"";
HRESULT hr = helper->ProtectMyPassword(L"Secret", &protectedPassword);
LOG("Before CoTaskMemFree");
CoTaskMemFree(protectedPassword);
LOG("After CoTaskMemFree");
return hr;
}
Я хочу, чтобы проверить, что метод ProtectMyPassword называется, так что я дразнил мой Helper -класс и написал следующий тест:
TEST(TestA, MyTest)
{
// arrange
NiceMock<HelperMock> helperMock;
A classUnderTest = A(&helperMock);
PWSTR password = L"SuperSecretPwd";
EXPECT_CALL(helperMock, ProtectMyPassword (_, _)).WillByDefault(DoAll(SetArgPointee<2>(password), Return(1)));
// act
HRESULT hr = classUnderTest.doStuff();
// assert
EXPECT_TRUE(SUCCEEDED(hr));
}
Однако, если я запускаю тест он показывает «RUN», но не «OK» и заканчивается без каких-либо ошибок.
[ RUN ] TestA.SomeOtherTest
[ OK ] TestA.SomeOtherTest (2 ms)
[ RUN ] TestA.MyTest
D:\Projects\PwdSafe\C++\x64\Release>
В моем журнале я вижу "Перед CoTaskMemFree", но не "После CoTaskMemFree". Я уверен, что это нечто тривиальное, чего я не вижу, но я просто не могу это решить. Неужели кто-нибудь может объяснить это поведение?
Действительно, они передают статическую строку: 'PWSTR password = L" SuperSecretPwd ";'. Макрос 'EXPECT_CALL()', кажется, синтезирует вызов функции, который просто устанавливает параметр out этому указателю и возвращает 1. – andlabs