我已经设置了Visual Studio 2010中的一个项目编写针对现有的MFC DLL单元测试。 我使用的是单头单元测试框架,并将其链接到MFC DLL的从单元测试项目的lib包装。 我试图构建一个类,需要std::wstring
在它的构造。 下面是我的测试是这样的:
TEST_CASE("MyProject/MyTest", "Do the test.")
{
MockDbService mockDbService;
Foobar foo(L"{F00DFACE-FEED-DEAD-BEEF-C0FFEEDECADE}", mockDbService);
foo.loadObject();
REQUIRE(mockDbService.getMethodInvokeCount("query()") >= 1);
}
凡Foobar
是从被测MFC DLL导出的类。 但是,测试框架报告意外的异常。 我跟踪它到std::wstring
“复制字符串时的拷贝构造函数Foobar
的构造。 的MSVC调试器报告源字符串作为<Bad Ptr>
我创建了一个虚拟的构造函数, Foobar::Foobar(long num, IDbService& db)
和所有的值(包括IDbService&
遇到就好了。
无论是MFC DLL和我的单元测试EXE共享应保持编译器标志相当于一个属性表。 我在构建和运行在调试模式下进行测试。 任何想法,为什么std::wstring
不能跨越DLL复制?