使用WebBrowser控件(COMException)进行单元测试初始化​​失败

时间:2014-11-28 10:41:02

标签: c# winforms comexception

  

消息:初始化方法MyProject.Tests.MainWindow.Initialize抛出异常。 System.Runtime.InteropServices.COMException:
  System.Runtime.InteropServices.COMException:错误HRESULT E_FAIL已从调用COM组件返回..

     

堆栈跟踪:

     
      
  • System.Windows.Forms.UnsafeNativeMethods.IWebBrowser2.get_RegisterAsDropTarget()
  •   
  • System.Windows.Forms.WebBrowser.set_AllowWebBrowserDrop(布尔值)
  •   
  • MainWindow.Designer.cs中的MyProject.MainWindow.InitializeComponent():第819行
  •   
  • MainWindow.cs中的MyProject.MainWindow.InitWindow():第29行
  •   
  • MainWindow.cs中的MyProject.MainWindow..ctor():第19行
  •   
  • MainWindow.cs中的MyProject.Tests.MainWindow.Initialize():第21行
  •   

如果我关闭Visual Studio,打开它,然后运行我的测试,它们就会通过。如果我再次运行它们,即使没有执行任何 else,它们都会因上述错误而失败,并继续执行此操作,直到重新启动VS.我的初始化方法(当前)只是创建了我的测试使用的MainWindow类的新实例。

如果我调试测试而不是运行它们,测试通过,然后在运行时传递一次,就像我重新启动VS一样。

我在表单中有一个WebBrowser控件。如果我将其删除,则上述错误消失。当前对违规控件做任何事情的唯一代码是由设计者自动生成的。

注意到调用堆栈包含set_AllowWebBrowserDrop(这是我在设计器中禁用的属性),我为WebBrowser特有的属性尝试了许多不同的属性值组合控制。我不记得我尝试过的所有组合,但都没有解决问题,他们只是略微改变了堆栈跟踪。

搜索此问题并未产生许多有用的结果。我发现的大多数解决方案都是改变设计器中的一些WebBrowser设置,或者在实时运行程序中处理网页导航而不是单元测试。

这个问题使得使用TDD变得非常困难,我试图强迫自己参与这个项目,以便我可以在将来习惯更多的重大项目。

如何使用WebBrowser控件解决此问题,以便我可以再次成功运行测试?

0 个答案:

没有答案