Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 为什么在VS2012单元测试中运行All会导致崩溃,但逐个运行不会';T_Unit Testing_Visual Studio 2012 - Fatal编程技术网

Unit testing 为什么在VS2012单元测试中运行All会导致崩溃,但逐个运行不会';T

Unit testing 为什么在VS2012单元测试中运行All会导致崩溃,但逐个运行不会';T,unit-testing,visual-studio-2012,Unit Testing,Visual Studio 2012,我们刚刚从VisualStudio2008“升级”到VisualStudio2012。我们更新了单元测试,现在它们在单独运行时通过了,但当我尝试全部运行时,出现以下错误: The active Test Run was aborted because the execution process exited unexpectedly. To investigate further, enable local crash dumps either at the machine level or

我们刚刚从VisualStudio2008“升级”到VisualStudio2012。我们更新了单元测试,现在它们在单独运行时通过了,但当我尝试全部运行时,出现以下错误:

The active Test Run was aborted because the execution process exited unexpectedly. To investigate further, enable local crash dumps either 
at the machine level or for process vstest.executionengine.appcontainer.x86.exe. Go to more details: [http://go.microsoft.com/fwlink/?linkid=232477][1]
因此,我转到并按照说明添加注册表项以启用本地崩溃转储。然后,错误消息更改为:

The active Test Run was aborted because the execution process exited unexpectedly. Check the execution process logs for more information. 
If the logs are not enabled, then enable the logs and try again.
显然,它注意到了我在注册表中为启用崩溃所做的更改。但是,当我查看%LOCALAPPDATA%\CrashDumps时,没有创建任何文件

如果我一次运行一个测试(甚至一次运行几个测试),我可以让它们全部通过。问题只存在于Run All

还有其他人遇到过类似的问题吗?如果是,你是如何解决的

从本质上讲,他们问了同样的问题,但答案是“点击链接到崩溃转储”。这个答案对我没有帮助,因为我看不到任何指向崩溃转储的链接,而且我无法生成崩溃转储

在StackOverflow上也是类似的,并最终导致了一个错误(看起来由于某种原因被推迟了),但我的问题可能不同,因为我的代码与“异步任务”无关(我不认为)


编辑:问题似乎自行消失了,但问题很可能是单元测试代码中没有发现的异常,正如下面的一些答案所示。但是,我仍然不明白为什么问题只出现在Run All上,而不是在运行较小的测试组或Debug All时出现。

到目前为止,我最好的解决方法是全部调试。这是通过测试->调试->所有测试完成的。速度明显较慢,但不会崩溃。

我也遇到了同样的问题。原来这就是我的代码——有一个无限循环的WCF服务调用。在你的情况下,这可能是另一回事。所以我的建议是要么记住(在版本控制系统中登录?),要么找出(通过从运行中排除不同的测试,例如使用二分法)代码中的哪个位置导致这种行为。还有乌阿拉!这是问题的原因,同时也是代码中的错误

更新 至于你编辑中的问题。可能会出现这样的情况,即运行较小的测试组不会重现该问题。在这种情况下,考虑到这些组包括所有测试,可以假设某些测试会产生干扰。可能是测试类中的一些静态数据或字段?
至于在调试模式下运行测试,我并不感到惊讶。Visual Studio test runner在“运行”模式和“调试”模式下的行为不同。

我也有同样的问题,测试显然没有任何原因而失败。后来我发现一个有缺陷的方法导致了一个
StackOverflowException
。当我修复错误时,VS错误消失了


可能它大部分时间都能工作,因为您没有运行错误代码。

我也有类似的问题,只是它不是stackoverflow异常。这是由于我使用Entity Framework测试的项目以及EntityFramework和EntityFramework.SqlServer模块中包含的NUnit项目引起的。添加对实体框架模块的引用修复了它。

这可能会发生某些错误,例如堆栈溢出。这可能会使测试运行程序崩溃,因此当遇到导致问题的测试时,它无法继续


因此,解决方案是在调试中运行所有测试(从“测试->调试”菜单),Visual Studio将显示类似的错误。

对于将来可能需要的任何其他人:当通过单元测试执行特定于控制台的命令(Environment.Exit(-1);)时,我的测试运行程序崩溃。即使在调试模式下运行也会崩溃——我无法获得有用的错误消息

因此,我的场景与主要问题场景不同,a)调试根本不起作用b)全部运行与单独运行没有区别。这是因为我的错误场景总是出现,但原始问题的堆栈溢出没有出现


底线是:TestRunner很糟糕,如果发现不喜欢的东西就会崩溃。你需要手动隔离并找出什么是坏事™ 是。

对于其他正在查找此信息的人:我有一些调用System.Environment.Exit(123)的代码,但我不知道这一点。因此,检查是否有终止进程的代码。

也有同样的问题。关闭并重新打开visual studio为我修复了它。

您是否能够运行测试子集并使其崩溃?如果没有看到您的代码,很难猜测是什么导致了问题。@MikeParkhill是的,如果我将测试分解为足够小的子集,它们都可以运行而不会崩溃。不过,我想了解的是,是否有特定的子集导致崩溃。可能是一个或两个测试一起导致问题。知道哪一个可能会暴露问题。奇怪的是,没有。似乎没有一个模式。我跑了所有的路,结果失败了。然后我跑了50次,结果失败了。然后我跑了25英里,它就成功了。然后接下来的25个工作也开始了!换句话说,我不能把它缩小到一个特定的测试或一组测试。如果我尝试越来越小的小组,每次测试最终都会通过。自我补救。。有趣的VS!谢谢你的回答。我相信你是对的,我已经对我的问题进行了编辑。使用@interrobang的答案,得到了你的StackOverflowException。我意识到我的一个类(classA)初始化了另一个类对象(classB),classB初始化了一个classA。这形成了某种无限循环,但没有for循环可供查找,因此我感到困惑。还有一个
StackOverflowException
。调试所有测试都有效,并且在触发SOE时实际产生了一个程序错误,允许我中断并检查callstack。我也遇到了StackOverFlowExceptionI的堆栈溢出错误(通过从未满足其基本情况的递归方法)。我不能称之为StackOverFlowException b/c,很明显/令人沮丧的是,一个异常没有通过