gpt4 book ai didi

c++ - 谷歌模拟 : leaked mock object found at program exit?

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:48 28 4
gpt4 key购买 nike

当我按如下方式定义我的测试时,它就起作用了。

TEST(MyService, WhenCalled_DoesTheRightThingTM) {

// Arrange
ThirdPartyClassFake stub;

EXPECT_CALL(stub, GetFirstName())
.WillRepeatedly(Return("Bob"));

// Act
std::string result = stub.GetFirstName();

// Assert
EXPECT_STREQ("Bob", result);
}

ThirdPartyClassFake 是我创建的谷歌模拟类。

当我添加将指向我的 stub 的指针传递给包装类的代码时,我得到了内存泄漏错误:

TEST(MyService, WhenCalled_DoesTheRightThingTM) {

// Arrange
ThirdPartyClassFake stub;

EXPECT_CALL(stub, GetFirstName())
.WillRepeatedly(Return("Bob"));

// Act
MyWrapperClass wrapper(&stub);
std::string result = stub.GetFirstName();

// Assert
EXPECT_STREQ("Bob", result);
}

错误是:

1>  [ RUN      ] MyService.WhenCalled_DoesTheRightThingTM
1>unknown file : error : SEH exception with code 0xc0000005 thrown in the test body.
1> [ FAILED ] MyService.WhenCalled_DoesTheRightThingTM (1 ms)

1>c:\myfile.cpp(17): error : this mock object (used in test
MyService.WhenCalled_DoesTheRightThingTM) should be deleted but never is.
Its address is @0028E40C.
1>EXEC : error : 1 leaked mock object found at program exit.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5):
error MSB3073: The command "C:\MyProject.Tests.exe
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5):
error MSB3073: :VCEnd" exited with code 1.

不确定它是否相关,但我应该添加来自第 3 方抽象类(我无法控制)的 ThirdPartyClassFake 子类,其中包含所有虚拟方法但没有虚拟析构函数。它还使用 Microsoft 特定属性 __declspec(novtable) 进行声明。

我认为问题可能在于缺少虚拟析构函数,如 Google Mock FAQ 中所述。 .但是我相信如果这是问题所在,那么第一个测试也应该失败。

如何修复/解决此错误?

最佳答案

0xc0000005 是内存中的访问冲突。如果您没有使用正确的开关编译代码,可能会抛出此 SEH 异常并且未正确调用析构函数。

关于c++ - 谷歌模拟 : leaked mock object found at program exit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541651/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com