dri*_*iis 99 unit-testing mstest visual-studio-2010 visual-studio
在Visual Studio 2010中,我有许多单元测试.当我使用测试列表一次运行多个测试时,我有时会在一个或多个测试中发现以下错误:
在测试运行时,代理程序进程已停止.
从来没有相同的测试失败,如果我再次尝试运行测试,它就会成功.
我在Connect上发现了这个错误报告,这似乎是同样的问题,但它没有提供解决方案.
有没有人见过这种行为?我怎么能避免呢?
我仍然遇到这个错误,我的许多同事也在使用相同的软件/硬件设置.到目前为止,我已经评估了答案,但他们没有解决问题.我正在为这个问题找到解决方案.
maf*_*afu 87
此消息是由与执行测试线程不同的线程上的异常引起的.到目前为止,所有答案归结为这个简单的解释.Visual Studio中的一个已知错误是在这种情况下不显示任何合理的信息.
如果执行测试线程之外的线程抛出异常,Visual Studio的测试运行器会完全窒息:它被吞没并且没有输出,没有机会进行拦截和调试,除了被烧毁的闷烧混乱之外什么都不应该是你的单位测试.
sat*_*org 41
我刚刚经历过类似的问题:一些测试失败,并且它们在不同的测试运行中有所不同.我不确切地知道它发生的原因,但是当我在我的一个类中添加一个终结器时,它就开始出现了.当我禁用终结器时 - 问题就消失了.当我打开终结器时 - 问题又回来了.
现在我不知道如何克服这一点.
Sim*_*ele 16
我遇到了这个问题,结果证明我的代码中的一个问题是测试框架无法正常捕获.一点意外的重构给我留下了这段代码:
public void GetThingy()
{
this.GetThingy();
}
Run Code Online (Sandbox Code Playgroud)
这当然是无限递归,并导致StackOverflowException(我猜).这引起了可怕的:"代理程序在测试运行时停止了."
快速代码检查向我展示了问题,我的测试现在运行正常.希望这有帮助 - 可能值得检查代码寻找问题,或者可能在控制台应用程序中提取一些并检查它是否正常工作.
通过查看测试结果文件(/TestResults/*.trx),我能够找到问题的根源.它提供了后台线程中发生的异常的完整详细信息,并且一旦我解决了该异常,停了......"错误消失了.
在我的情况下,我无意中在我的单元测试中启动了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>
Run Code Online (Sandbox Code Playgroud)
这没有提供关于什么测试导致错误的任何信息,但它确实显示了异常的位置,这非常有用.
此消息通常在测试进程崩溃时生成,并且可能在后台线程发生未处理的异常,发生堆栈溢出或显式调用Process.GetCurrentProcess().Kill()或发生时发生Environment.Exit.另一个可能的原因是非托管代码中的访问冲突.
没有人提到过的事情是事件日志中可能还有其他信息.通常,您不会获得有关测试在结果中崩溃的原因的大量信息,但是如果后台线程上出现未处理的异常,则测试框架会将详细信息写入具有源VSTTExecution的应用程序事件日志.如果没有信息写入事件日志,则可能是上面列出的其他原因之一.
| 归档时间: |
|
| 查看次数: |
32650 次 |
| 最近记录: |