vstest.executionengine.x86.exe不能closures

运行unit testing时遇到错误。 如果我debuggingunit testingvstest.executionengine.x86.exe运行,然后closurestesting通过。

如果我只是运行testing(即使testing就像创build一个新列表一样简单,没有断言)vstest.executionengine.x86.exe不closures,并保持运行在任务pipe理器。

这对于编写更复杂的testing(包括删除文件/清理sqllite数据库)来说是一个问题。

任何帮助,将不胜感激。

编辑:

重现步骤 :

  • 创build新的unit testing项目
  • debuggingunit testing – vstest.executionengine.x86打开和closures,testing通过。
  • 运行unit testing – vstest.executionengine.x86打开并保持打开状态

这是devise。

只有在两次连续testing运行之间检测到configuration发生变化时,才会重新启动vstest.executionengine.exe。 这有助于确保我们不会不必要地重启进程。

产品更新使用VS2013,我们在“testing” – >“testing设置”下面新build了一个名为“保持testing执行引擎运行”的菜单项。 您可以取消选中此选项以退出默认行为。

我通过在受影响的testing项目上使用以下内容作为预生成事件来解决此问题:

对于64位:

 taskkill /F /IM vstest.executionengine.exe /FI "MEMUSAGE gt 1" 

或32位:

 taskkill /F /IM vstest.executionengine.x86.exe /FI "MEMUSAGE gt 1" 

在构buildtesting项目之前,这样静静地杀死执行引擎。 如果执行引擎没有运行,那么/FI "MEMUSAGE gt 1"停止命令(因此构build)失败。

对于它的价值,我遇到了同样的情况,事实certificate,我做了一个没有正确清理所有资源的testing。 在我的具体情况下,有一个后台线程打开networking连接,在testing退出前没有closures。 不知道为什么退出testing没有closures这个对我来说,但是当我修复我的代码,妥善处理我打开的所有资源,一切按预期工作。 我不必添加任何黑客来杀死vstest.executionengine.exe ,也不必select退出Test -> Test Settings -> Keep Test Execution Engine Running

我知道这是旧的,但我想我会扔我刚刚发现的东西。

我正在运行的一个testing有一些对象,它实现了IDisposable ,所以代码分析告诉我,我的testing类应该如此。 它花了一段时间才意识到,但是当this.Dispose(); 当我把它放在我的testing类上时,它正在调用该接口的实现,实际上是抛出一个StackOverflowexception。 所以我只是拉开了界面,让CA继续发牢骚。

我不需要切换“保持testing执行引擎运行”。

使用Resharper的testing运行器运行testing时出现此问题,这似乎并不考虑Test-->Test Settings-->Keep Test Execution Engine Running设置。 在我的情况下,它导致构build失败,出现以下错误:

警告MSB3026:无法将“… \ SQLite.Interop.dll”复制到“bin \ Debug \ x86 \ SQLite.Interop.dll”。 从1000ms开始重试10次。 该进程无法访问文件'bin \ Debug \ x86 \ SQLite.Interop.dll',因为它正在被另一个进程使用。

为testing项目添加预构build事件@HappyCatbuild议为我工作。 我还需要将它封装在if语句中,以防止它在构build服务器上运行并干扰其他作业。

 if $(ConfigurationName) == Debug ( echo "attempting to kill vstest to prevent access denied on sqlite.interop.dll" taskkill /F /IM vstest.executionengine.x86.exe /FI "MEMUSAGE gt 1" )