GMock 测试夹具在 Windows 上崩溃
GMock test fixture crashes on Windows
我是使用GMock框架的新手。但是,我有以下生产应用程序productionApp
和测试应用程序testApp
。我的生产应用程序运行良好。但是在夹具中执行第一个测试后,测试崩溃。
class IRegEditor
{
public:
virtual bool Read(int&) = 0;
virtual bool Write(const int&) = 0;
virtual ~IRegEditor() {}
};
class RegEditorImpl : public IRegEditor
{
public:
//use windows registry APIs instead
//read returns values based on current time.
//write fails for odd values.
bool Read(int& i) { if (system_clock::now().time_since_epoch().count() % 2)
return false; else { i = 10; return true; } }
bool Write(const int& j) { if (j % 2) return false; else return true; }
};
class RegEditorMock : public IRegEditor
{
public:
MOCK_METHOD1(Read, bool(int&));
MOCK_METHOD1(Write, bool(const int&));
};
class RegEditTest : public ::testing::Test
{
protected:
virtual void SetUp() {
regEditor.reset(®Mock);
}
std::shared_ptr<IRegEditor> regEditor;
RegEditorMock regMock;
};
class App
{
std::shared_ptr<IRegEditor> regEdit;
public:
//ctor to use in production
App() :regEdit{ std::make_shared<RegEditorImpl>() }
{}
//overloaded ctor to use for unit tests
App(std::shared_ptr<IRegEditor> regEditor) : regEdit{ regEditor }
{}
bool Writer(const int& number)
{
if (regEdit->Write(number))
{ std::cout << "write passed" << std::endl; return true; }
else
{ std::cout << "write failed" << std::endl; return false; }
}
bool Reader(int& number)
{
if (regEdit->Read(number))
{ std::cout << "read passed" << std::endl; return true; }
else { std::cout << "read failed" << std::endl; return false; }
}
};
TEST_F(RegEditTest, writeFails)
{
int number = 1;
EXPECT_CALL(regMock, Write(number)).Times(1).WillOnce(Return(false));
App testApp(regEditor);
EXPECT_FALSE(testApp.Writer(number));
}
TEST_F(RegEditTest, writeSucceeds)
{
int number = 2;
EXPECT_CALL(regMock, Write(number)).Times(1).WillOnce(Return(true));
App testApp(regEditor);
EXPECT_FALSE(testApp.Writer(number));
}
int main(int argc, char** argv) {
// The following line must be executed to initialize Google Mock
// (and Google Test) before running the tests.
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
我在运行测试时收到以下错误。它与GMock库的编译器设置兼容性有关吗?
Unhandled exception at 0x77639D71 (ntdll.dll)
A heap has been corrupted (parameters: 0x7766D8D0).
然后显示,它无法从 wntdll.pdb 加载符号。
以下生产应用按预期工作
int main()
{
App productionApp;
int num = 9;
productionApp.Reader(num);
productionApp.Writer(num);
std::cin.get();
return 0;
}
不能做regEditor.reset(®Mock);
这使得regEditor
拥有本地regMock
,现在,由于regMock
有两个所有者:它的自动存储持续时间,加上共享指针regEditor
- 当范围结束时,内存已损坏。这与GMock或GTest版本或编译器设置或兼容性没有任何关系。这是因为我对shared_ptr
的错误使用。感谢Jarod42和Angew的帮助。请参考如何使用shared_ptr从外部提供模拟对象?
相关文章:
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 在Windows上调试linux崩溃转储
- 从 C# Windows 应用程序调用 C dll 会导致 svchost.exe 崩溃
- UCRTbase.dll涉及TCP通信的C ++ Windows Embedded Standard崩溃
- 简单的文本文件格式化在linux下崩溃,但在Windows中很好
- 正则表达式在 Windows 上初始化时崩溃
- Windows 10 Creators Update(1703)崩溃了我们的应用程序
- Malloc()/free()在Windows上的几个线程中崩溃
- 当使用 /ENTRY:main 和 /MT 运行时库编译为 /SUBSYSTEM:WINDOWS 时,应用程序崩溃
- Windows C++程序中的访问冲突是否总是立即崩溃
- Windows/c - 从第三方EXE加载图标,用于SDL_SETWINDOWICON-崩溃
- libtorrent和tcp ::受体在Windows上崩溃并违反访问
- 当STDERR重定向到管道时,为什么BOOST ::流程在Windows上崩溃
- 程序在Windows中的DLL边界上使用嵌入式Python/C 代码崩溃
- 我的程序在Windows机器上崩溃了,但在Linux上运行良好
- GMock 测试夹具在 Windows 上崩溃
- 带有ATL子类的Windows 10 64位上的随机崩溃
- log4clus:在Logger:上崩溃:在Windows上关闭
- zeromq: PULL/PUSH客户端在连接31后崩溃.windows上的服务器
- Gtkmm程序编译良好,但崩溃- windows XP