使用带有NUnit的CruiseControl.NET,测试偶尔会失败:错误800704a6

问题描述

| 我和我的搭档在项目的构建服务器上每晚运行一组测试。我们使用CruiseControl.NET来运行服务器,并且使用WatiN和NUnit编写测试。我们将CruiseControl.NET作为一项服务运行,并且可以与本地系统帐户上的桌面进行交互。每运行几次构建,​​某些测试就会失败,并显示以下错误消息:
Test:   cfarmweb.tests.Views.GeneralRegressionTest.DuplicateUsernameTest  
Type:   Failure  
Message:    SetUp : System.Runtime.InteropServices.COMException : Creating an instance of the COM component with CLSID {0002DF01-0000-0000-C000-000000000046} from the IClassFactory Failed due to the following error: 800704a6. TearDown : System.NullReferenceException : Object reference not set to an instance of an object.


at WatiN.Core.IE.CreateNewIEAndGoToUri(Uri uri,IDialogHandler logonDialogHandler,Boolean createInNewProcess)  
at WatiN.Core.IE..ctor(String url)  
at cfarmweb.tests.Navigator.SiteNavigator..ctor(String browserName,Boolean visible) in c:\\ccworkdir\\CFarm\\builddir\\cfarmweb.tests\\Navigator\\SiteNavigator.cs:line 35  
at cfarmweb.tests.Views.GeneralRegressionTest.MakeNavigator() in c:\\ccworkdir\\CFarm\\builddir\\cfarmweb.tests\\Views\\GeneralRegressionTest.cs:line 34  
--TearDown  
at WatiN.Core.browser.OnGetNativeDocument()  
at WatiN.Core.DomContainer.get_NativeDocument()  
at WatiN.Core.Document.ContainsText(String text)  
at cfarmweb.tests.Navigator.SiteNavigator.HasText(String target) in c:\\ccworkdir\\CFarm\\builddir\\cfarmweb.tests\\Navigator\\SiteNavigator.cs:line 213  
at cfarmweb.tests.Navigator.SiteNavigator.SignOut() in c:\\ccworkdir\\CFarm\\builddir\\cfarmweb.tests\\Navigator\\SiteNavigator.cs:line 110  
at cfarmweb.tests.Views.GeneralRegressionTest.disposeNavigator() in c:\\ccworkdir\\CFarm\\builddir\\cfarmweb.tests\\Views\\GeneralRegressionTest.cs:line 123  
构建的成功似乎并不依赖于代码本身的更改,因为我们已经中断了构建或在与测试无关的程序部分更改后修复了构建。 我们都是软件测试领域(以及一般而言的开发领域)的新手,但我们在网上发现的有关此错误的任何信息似乎都不符合我们的情况。我们已经看到了从系统重新启动到Internet Explorer 8的兼容性问题再到JavaScript错误的所有内容,但是我们没有尝试解决任何问题。最困难的部分之一是它不能始终如一地再现。我们如何解决这个问题?     

解决方法

        本 我有完全相同的问题,令人惊讶的是……我想我有解决方案。它似乎是一个线程问题。测试顶部的
[RequiresSTA]
标记旨在通过将标记ѭ2placing隐式地放置在每个方法上,从而将每个测试创建为单线程。但是,我倾向于认为没有在
[SetUp]
[TearDown]
方法上调用这些标签,从而导致线程问题。我希望通过将[STAThread]标记显式地放置在每个方法(包括
[SetUp]
[TearDown]
方法)上来解决此问题。我将让您知道任何进一步的更改,但这值得一试。     ,        还有一些与Watin和IE8相关的问题。 在TeamCity上运行Watin 由于以下错误而失败:800704a6尝试从teamcity中的文本文件读取数据时 https://serverfault.com/questions/179156/ie8-script-error-800704a6 据我了解,请确保您的Windows已完全更新,再次进行重新启动只是为了确保并检查问题是否仍然存在。 如果是这样,请尝试不在服务模式下运行ѭ7。 如果仍然不好,请尝试使用Internet选项安全性来确定这是否影响了问题。 高温超导