VS 2010testing运行器错误“代理进程在testing运行时停止。

在Visual Studio 2010中,我有许多unit testing。 当我使用testing列表一次运行多个testing时,我有时会重申以下一个或多个testing的错误:

代理进程在testing运行时停止。

这是从来没有同样的testing失败,如果我试图再次运行testing,它会成功。

我在Connect上发现了这个错误报告 ,这似乎是同样的问题,但它不提供解决scheme。

有没有其他人看到这种行为? 我怎样才能避免它?

编辑

我仍然遇到这个错误,同样的软件/硬件设置上的许多同事也是如此。 到目前为止,我已经评估了答案,但是他们没有解决问题。 我开始解决这个问题的赏金。

我刚刚经历了类似的问题:一些testing失败,并且在不同的testing运行中有所不同。 我不清楚它发生的原因,但是当我为我的一个类添加一个终结器时,它就开始发生了。 当我禁用终结者 – 问题消失。 当我打开终结者 – 问题回来了。

现在我不知道如何克服这个问题。

此消息是由与正在执行的testing线程不同的线程上exception引起的。 所有的答案到目前为止归结为这个简单的解释。 这是Visual Studio中一个已知的错误,在这种情况下不要显示任何明智的信息。

如果执行的testing线程之外的线程抛出exception,Visual Studio的testing运行器会完全窒息:它被吞没,没有输出,没有机会拦截和debugging,除了被认为是你的单元的烧毁的混乱testing。

我遇到了这个问题,结果是我的代码中的testing框架没有正确捕获。 有一点意外的重构使我得到了这个代码:

 public void GetThingy() { this.GetThingy(); } 

这当然是一个无限的recursion,并导致StackOverflowException(我猜)。 这造成的是可怕的结果:“代理进程在testing运行时停止了。”

一个快速的代码检查显示我的问题,我的testing现在运行良好。 希望这有助于 – 可能值得检查代码寻找问题,或者可能提取一些控制台应用程序,并检查它在那里正常工作。

通过查看testing结果文件(/TestResults/*.trx),我能够find我的问题的来源。它提供了在后台线程中发生的exception的完整细节,一旦我解决了exception“代理处理停了……“错误消失了。

在我的情况下,我无意中在我的unit testing中启动GUI,最终导致System.ComponentModel.InvalidAsynchronousStateException抛出。

所以我的.trx文件包含:

  <RunInfo computerName="DT-1202" outcome="Error" timestamp="2013-07-29T13:52:11.2647907-04:00"> <Text>One of the background threads threw exception: System.ComponentModel.InvalidAsynchronousStateException: An error occurred invoking the method. The destination thread no longer exists. at System.Windows.Forms.Control.WaitForWaitHandle(WaitHandle waitHandle) at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) at System.Windows.Forms.Control.Invoke(Delegate method) ... </Text> </RunInfo> 

这没有提供什么testing导致错误的任何信息,但它确实显示了例外情况,这是非常有用的。

这个消息通常在testing过程崩溃时产生,当后台线程出现未处理的exception,发生堆栈溢出或者显式调用Process.GetCurrentProcess().Kill()Environment.Exit 。 另一个可能的原因是非托pipe代码中的访问冲突。

没有人提到过,事件日志中可能有其他信息。 通常情况下,您不会获得有关testing结果崩溃原因的信息,但是如果后台线程出现未处理的exception,则testing框架将使用源VSTTExecution将详细信息写入应用程序事件日志。 如果没有写入事件日志的信息,则可能是上面列出的其他原因之一。

感谢您发布的问题。 我只是遇到了这个问题,并找出了你可能遇到的一个原因。

asynchronousexception可能已经发生

在我的testing设置过程中,我创build了一个在线程池中排队工作线程的对象。 如果我运行debugging足够快,我的代码通过。

如果工作线程在testing设置完成之前启动并出现错误,那么我得到一个中止的结果,没有推理。

如果工作线程启动并且在testing开始后出现错误,那么我得到的结果是:错误 – 代理进程在testing运行时停止。

重要提示:这是我在我的几个testing中使用的一个组件。 如果testing框架遇到太多这些错误,则会中止其余的testing。

希望这可以帮助

我遇到了同样的问题,解决了它,而删除

 Environment.Exit(0); 

所以我很确定,这个错误发生在你的testing或者testing方法正在导致执行进程终止的时候。

在我的情况下,解决scheme是通过检查输出窗口来解决的。

'QTAgent32.exe'(托pipe(v4.0.30319)):载入'C:\ TestResults \ bdewey_XXXXXX072 2011-01-11 17_00_40 \ Out \ MyCode.dll',加载符号。 E,9024,9,2011/01/11,17:00:46.827,XXXXX072 \ QTAgent32.exe,通过Watson报告未处理exception:[Exception message]

在我的情况下,我有一个FileSystemWatcher抛出一个单独的线程错误。

我有同样的问题,这是由一个非托pipe资源的终结器(一个文件编写器,由于某种原因没有得到妥善处理)造成的。

在吞下exception的try-catch中包装终结器代码之后,问题就消失了。 我不build议吞咽这样的exception,所以明智地找出为什么例外发生在第一位。

这种事情发生在奇怪的场合,肇事者几乎总是穿线。

奇怪的是,所有的testing都能在开发机器上正常工作,然后在构build服务器上随机失败。

经仔细检查发现,尽pipetesting被列在发送箱上,但也有例外。 exception被抛出一个单独的线程,没有被拿起作为一个错误。

这个exception详细信息是针对testing跟踪logging的,所以我们能够确定哪些代码/testing需要修改。

希望这有助于某人。

我添加了try / catch块给descructor〜ClassName(){},这些在我的testing中涉及到的任何类中定义。 这为我解决了这个问题。

 ~MyClass() { try { // Some Code } catch (Exception e) { // Log the exception so it's not totally hidden // Console.WriteLine(e.ToString()); } } 

要找出抛出exception的位置,请单击“testing结果”窗口中感叹号图标旁边的超链接“testing运行错误”。 带有堆栈跟踪的窗口打开。

这有助于很多追踪错误!

在我的情况下,我有一些WCF服务的unit testing。 这个WCF服务启动了2个定时器。
那些计时器造成副作用。
– >我禁用这些定时器默认情况下,一切都很好!

顺便说一句:我使用WCFMock伪造WCF服务,所以我有我的WCF服务“真正的”unit testing

这个错误也是由我的Finalizer引起的。
终结者实际上是调用一些没有被嘲笑的DB代码。 花了我一段时间才发现它,因为它不是我写的一个类,其中的参考被深入了几个类。

我遇到了一个类似的问题,在TestInitialize中testing失败,并且也从我的另一个项目的ddl运行代码。 我得到如上所述的错误消息,如果我尝试debuggingtesting,testing只是中止没有任何例外的细节。

我怀疑问题可能是从我的其他项目的DLL来自Visual Studio 2012项目,我正在VS2010项目中运行我的testing,和/或可能从2个项目的UnitTestFramwork DLL版本不匹配。

这个问题也可以通过TestClass的Constructor中的Exception或Stackoverflow来触发。

由于这个错误可能有许多不同的原因,我想补充一个这个线程的完整性。

如果所有的testing都按照OP描述的那样中止,那么原因可能是错误的项目configuration。 在我的情况下,目标框架被设置为.NET Framework 3.5。 通过项目属性页面(选项卡应用程序 )将其设置为更高版本解决了问题。