使用CruiseControl.NET和NUnit偶尔测试失败:错误800704a6

时间:2011-06-14 17:36:07

标签: nunit cruisecontrol.net watin

我的合作伙伴和我在我们项目的构建服务器上每晚运行一套测试。我们使用CruiseControl.NET来运行服务器,测试使用WatiNNUnit编写。我们将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错误的兼容性问题,但我们尝试过的任何问题都没有解决问题。最困难的部分之一是它不能始终如一地重现。我们如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

本, 我有完全相同的问题,令人惊讶的是......我认为我有解决方案。这似乎是一个线程问题。测试顶部的[RequiresSTA]标记用于通过在每个方法上隐式放置标记[STAThread]来创建每个单线程测试。但是,我倾向于认为这些标记没有在[SetUp][TearDown]方法上调用,从而产生了线程问题。我希望通过在每个方法(包括[SetUp][TearDown]方法)上明确放置[STAThread]标记来解决问题。我会告诉你任何进一步的变化,但它值得一试。

答案 1 :(得分:1)

有一些与Watin和IE8相关的类似问题。 Running Watin on TeamCity failed due to the following error: 800704a6 while trying to read data from a text file in teamcity https://serverfault.com/questions/179156/ie8-script-error-800704a6

根据我的理解,确保Windows已完全更新,再次重新启动以确保并检查问题是否仍然存在。
如果是,请尝试在服务模式下运行ccnet 如果仍然不好,请尝试使用互联网选项安全性来确定这是否会影响问题。

HTH