【问题标题】:Unit Testing issue in Visual Studio 2012Visual Studio 2012 中的单元测试问题
【发布时间】:2012-11-02 12:21:37
【问题描述】:

每当我尝试在 Visual Studio 2012 的测试套件中运行任何测试时,我都会得到

测试失败 - [测试方法名称]

消息:无法设置执行上下文来运行测试

我的测试甚至没有开始(即测试失败的根源指向测试方法的开头:

这里--> TEST_METHOD([测试方法名称]) {

}

这条消息是什么意思,它出现的原因是什么,我应该怎么做才能让我的测试正常运行?

【问题讨论】:

标签: unit-testing visual-studio-2012


【解决方案1】:

经过更多研究后,我意识到我忽略了这样一个事实,即我更改了包含被测方法(这是一个 .dll)的项目的“输出目录”,并且与我的测试项目库不在同一个文件夹中,因此给了我信息:

消息:无法设置执行上下文来运行测试

因此,通过确保包含被测方法的 .dll 与我的测试项目库位于同一文件夹中,以便在运行时我的测试项目可以找到 .dll,问题得以解决。

【讨论】:

  • 这个解决方案也适用于 VS'15u3,(可能是 VS'17,虽然我无法确认)。
  • 我遇到了这个问题。所以你是说你不能在他们的项目文件夹之外创建一个所有项目都构建的公共 bin 文件夹? VS 需要解决这个问题。
  • 我更改了我的输出目录,但将它们改回来并不能解决这个问题。你能举一个适合你的路径的例子吗?
  • Nvr 头脑。只需设置 UnitTest dll 路径以匹配正在测试的项目的输出。
【解决方案2】:

我遇到了同样的问题,前面提到的建议并没有为我解决。我的项目使用了一些第三方库,并且这些库的路径在我的 VS 项目的编译器和链接器设置中正确设置。

原来VS测试引擎无法找到库,所以我将这些库的路径添加到PATH环境变量中。这为我解决了这个问题。

提示:尝试使用 VSTest.Console.exe 从命令行运行单元测试。错误消息帮助我更轻松地调试问题。

【讨论】:

  • +1 提示运行 VSTest.Console.exe。我添加了一个带有构建后副本的 .props 文件,以将所有 DLL 依赖项复制到定义的 $(OutDir)。此外,这个问题和答案适用于 VS 2015(这就是我正在使用的)。
  • 仅作记录——要使用VSTest.Console.exe,必须打开Developer Command Prompt for Visual Studio...。在那里,可以通过找到适当的 DLL 来运行单元测试,然后调用 VSTest.Console.exe /Platform:x64 UnitTest.xyz.dll。 (x86 用于 32 位)
  • 在不知不觉中,我不小心删除了已复制到项目二进制文件夹中的外部库的.dll 文件。我跑了VSTest.Console.exe,它提示我缺少那个 .dll 文件。
【解决方案3】:

对于那些寻找其他答案的人来说,找到所有需要的 DLL 是一个问题。我按照上面的建议将测试 dll 和要在同一位置进行测试的 dll 都放在同一位置,但仍然出现此错误。

我的测试 DLL 在其本机环境之外找不到它的子 DLL。您可以通过运行 depends.exe 找出缺少的内容。将这些其他 DLL 的位置添加到我的路径解决了问题,现在一切正常。

【讨论】:

  • 对于使用Visual Studio的人来说,有一些依赖的dll位于Configuration Properties->Linker->General->Additional Library Directories
【解决方案4】:

我收到此错误,这是因为我使用的是调试 DLL,并且没有可以找到它们的调试 c++ 运行时。我将调试 c++ 运行时复制到同一目录中,问题已解决。

【讨论】:

    【解决方案5】:

    在我的项目中包含第三方 dll (OpenCV) 后出现此错误。将 dll 添加到路径或将其放到 system32 目录中确实有效,但我有更好的解决方案。

    测试从名为 AppX 的目录运行。就我而言,它在这里: .......OneDrive\Documents\Visual Studio\Projects\TutorialOcr\x64\Debug\OcrTesting\AppX

    我刚刚把 dll 放在那里,测试成功了!

    【讨论】:

      【解决方案6】:

      为测试创建的 .dll 从它构建到的文件夹中运行。在我的情况下,“x64\UnitTests\Tests.dll”。我的应用程序的其余部分位于“x64\Debug\App.exe”和“x64\Release\App.exe”中。 我的应用程序依赖于位于项目根文件夹中的外部 dll,这也是为调试启动指定的“工作目录”。

      但测试资源管理器测试启动器会忽略该设置并始终使用工作目录“x64\UnitTests”启动 Tests.dll,然后找不到我依赖的 dll。在测试类构造函数中添加SetCurrentDirectory("..\\.."); 并不能解决问题,因为如果找不到静态依赖项,甚至无法将 dll 加载到内存中。

      我通过将 UnitTests 配置的“输出目录”设置为“$(SolutionDir)”来解决它。这会导致在根文件夹中创建 Tests.dll。

      【讨论】:

        【解决方案7】:

        我也仅在发布配置中遇到此错误,因为我不小心将调试库用作我的测试项目的库依赖项之一。 (与 bmann 的帖子相同的问题)

        为了找到导致问题的库,我注释掉了所有测试代码及其包含,添加了一个空测试,并一个一个删除了我的依赖库,直到测试正常。

        【讨论】:

          猜你喜欢
          • 2014-09-07
          • 2013-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-15
          相关资源
          最近更新 更多