を使用した場合のテストは、私はCoTaskMemFreeを使用してメモリをクリーンアップするクラスのメソッド持って結果なしで返します。Googleのモック - 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が呼び出されることをテストしたいので、私は私のヘルパーを嘲笑次のテストを-classと書きました:
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