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" )