Google Mock - 使用 CoTaskMemFree 时,测试返回没有结果
Google Mock - Test returns without result when using CoTaskMemFree
我在类中有一个使用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 的方法,所以我模拟了我的帮助程序类并编写了以下测试:
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 ] TestA.SomeOtherTest
[ OK ] TestA.SomeOtherTest (2 ms)
[ RUN ] TestA.MyTest
D:ProjectsPwdSafeC++x64Release>
在我的日志中,我看到"在CoTaskMemFree之前",但没有看到"在CoTaskMemFree之后"。我敢肯定这是我看不到的微不足道的事情,但我就是无法解决它。谁能解释这种行为?
CoTaskMemFree
用于释放分配有 CoTaskMemAlloc
或 CoTaskMemRealloc
的内存。如果不是这种情况,它将失败。
您的模拟正在生成一个不满足此条件的指针。
PWSTR password = L"SuperSecretPwd";
因此运行时错误。为了解决这个问题,你需要从COM堆中分配你的模拟。
相关文章:
- 我是否正确测试了返回值优化?
- 使用 Google 基准测试时返回值会发生什么情况?
- 测试用例状态为失败,但返回的值为 true
- 谷歌测试:如何返回成功结果?
- 为什么生成文件返回 g++: 错误: h 文件或目录 make: *** [生成文件:12: 测试] 错误 1?
- 谷歌嘲笑!我的测试出错.默认情况下,呼叫将返回调用
- 为什么这个测试总是返回假
- 单位测试QT中的非返回功能
- 使用C ,使用SFINAE测试静态成员的存在,返回错误的值
- 如何测试仅返回系统值的API
- Google Mock - 使用 CoTaskMemFree 时,测试返回没有结果
- 如何在调试版本中测试断言,但在发布中返回值
- 二进制搜索测试柜不返回值
- 返回语句中的条件测试
- 显式布尔操作员 - 无法返回,测试,初始化bool
- 将函数中的值返回到由 while 循环测试的值.C++
- 检查两个数组中的相似元素,为某些测试返回正确的值,为其他测试返回不正确的值
- 为什么我的线段交叉测试不返回 true?
- 为什么 WinDbg 在测试内存泄漏程序时总是返回相同的"!heap -s"信息?
- 为什么一位数组返回零?合并排序测试