2012-11-02 209 views
18

每当我试图从我的测试套件中的Visual Studio 2012,我得到运行任何测试的单元测试问题在Visual Studio 2012

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

消息:失败设立执行上下文运行测试

和我的测试还没开始(即测试失败的根源指向在测试方法的开头:

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

}

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

+0

你可以在http://connect.microsoft.com/visualstudio提交这个错误吗? –

回答

19

一些调查研究后,我意识到,我忽略了,我改变包含在测试方法(这是一个.dll)项目的“输出目录”,是不是在同一个文件夹中我的测试项目库的事实,因此给我的留言:

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

所以这个问题是通过确保包含测试方法的.dll文件解决在与我的测试项目库相同的文件夹中,以便在运行时我的测试项目可以找到.dll。

+0

该解决方案也适用于VS'15u3,(可能VS'17,尽管我无法确认)。 –

2

我得到这个错误,这是因为我使用的是调试DLL,并没有在那里能找到调试C++运行时。我将调试C++运行库复制到同一个目录中,问题已解决。

0

我也只在发布配置收到此错误,因为我不小心使用了调试LIB作为我的测试项目的库依赖关系之一。 (与bmann的帖子相同的问题)

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

13

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

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

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

+2

+1,用于运行VSTest.Console.exe的提示。我添加了一个.props文件和后构建副本,以获取所有DLL依赖项复制到定义的$(OutDir)。此外,这个问题和答案适用于VS 2015(这就是我使用的)。 – hlongmore

+2

只是为了记录 - 要使用'VSTest.Console.exe',必须打开Visual Studio的开发人员命令提示符...。在那里可以通过找到合适的DLL来运行单元测试,然后调用'VSTest.Console.exe/Platform:x64 UnitTest.xyz.dll'。 (x86 for 32bit) – Pascal

+0

不知不觉中,我意外删除了我复制到我的项目的二进制文件夹的外部库的'.dll'文件。我运行了'VSTest.Console.exe',它促使我错过了那个.dll文件。 –

7

对于那些寻找其他答案,这是找到所有需要的DLL的问题。我跟着上面得到两个测试DLL和DLL是在同一位置测试的建议,但仍然得到这个错误。

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

+0

对于那些使用Visual Studio的人来说,有一些依赖的DLL位于'配置属性' - >'链接器' - >'通用''''其他库目录' –

1

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

该测试从名为AppX的目录运行。在我的情况下,它是在这里: ....... OneDrive \ Documents \ Visual Studio \ Projects \ TutorialOcr \ x64 \ Debug \ OcrTesting \ AppX

我刚刚把dll放在那里,测试工作!

0

为测试创建的.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在根文件夹中创建。

相关问题