VS2012 本机单元测试失败,与 ZLib: "Failed to setup the execution context"



向zlibwapi.lib添加链接依赖项会导致我的所有单元测试失败,并显示消息"无法设置执行上下文以运行测试"。遗憾的是,该消息没有提供足够的详细信息来解决问题。具体了解测试执行上下文无法设置的原因将非常有用,例如,由于some_reason而无法加载some.dll。

其他帖子指出,所有依赖库都必须在同一个目录中,但这并不能解决我的问题。dumpbin.exe工具清楚地表明,向zlibwapi.lib添加链接依赖项只会将zlibwapi.dll添加到导入部分。此外,zlibwapi.dll的导入部分只包含KERNEL32.dll和MSVCR110D.dll,它们已经存在于单元测试库的导入部分中。所有非标准的依赖库都在单元测试运行时文件夹中,但它仍然失败。

通过下载zlib,在Visual Studio 2012 SP3中构建它,并添加本机单元测试,可以重现该问题。具体而言:

  1. 从下载zlib128.ziphttp://www.zlib.net.

  2. 遵循以下提示(http://bugbeebox.com/2012/12/29/building-static-zlib-v1-2-7-with-msvc-2012/)以Visual Studio 2012为基础构建。

  3. 将名为zlibunittest的本机单元测试项目添加到。。。\zlib-1.2.8\contrib\vstudio\vc11。在Build\Configuration Manager中,为新项目添加x64位平台,验证其"生成"复选框是否选中,并为活动解决方案平台选择x64。将项目依赖项从zlibunittest添加到zlibvc也很有用,以确保正确的构建顺序。

  4. 修改unittest1.cpp的TestMethod1以显示为:

    TEST_METHOD(TestMethod1)
    {
        Assert::AreEqual(0, 0);
    }
    

    将"测试-->测试设置-->默认处理器结构"设置为x64,并验证它在测试资源管理器中是否正确运行。

  5. 修改zlibunittest配置属性如下:

    a) 添加..\..\..\..\;到C/C++-->常规-->其他包含目录,以便可以找到zlib.h。b) 添加$(OutDir);到Linker-->General-->Additional Library Directories,以便可以找到zlibwapi.*。c) 添加zlibwapi.lib;到链接器-->输入-->其他依赖项。d) 添加副本。。\x64\ZlibDllDebug\zlibwapi.*$(OutDir)生成事件-->预生成事件,以便zlib运行库与单元测试库二进制文件位于同一目录中。

  6. 修改unittest1.cpp的TestMethod1以显示为:

    TEST_METHOD(TestMethod1)
    {
        Assert::AreEqual(0, 0);
        gzopen(NULL, NULL);
    }
    

    gzopen的NULL参数与这个错误无关,因为它从来没有走那么远。

  7. 在测试资源管理器中运行单元测试,并得到一般性错误"设置执行上下文以运行测试失败"。

  8. 现在,注释掉TestMethod1中的gzopen调用,并从附加的链接器依赖项中删除zlibwapi.lib,然后看着错误消失。

有人知道如何使ZLib与Visual Studio 2012本机单元测试协同工作吗?

至少,有人知道如何获得关于这个特定错误的更多细节吗,即某个地方的单元测试运行时日志?

原来zlib有一个错误,导致它需要Windows 8运行时。因此,在我的Windows7开发机器上运行单元测试显然导致了神秘而不必要的"设置执行上下文失败"错误。

一旦我应用了此修复程序https://stackoverflow.com/a/17113126/2319854到了zlib并重新构建了all,单元测试又开始工作了。

相关内容

最新更新