使用WinForms和NUnit进行自动测试

使用WinForms和NUnit进行自动测试,nunit,cruisecontrol.net,Nunit,Cruisecontrol.net,我正在使用Cruise Control.NET和NAnt在我们的代码库上自动运行NUnit测试。某些测试导致显示Windows窗体。当从VS或NUnit GUI手动运行这些测试时,它们工作正常。当通过巡航控制服务运行时,我得到以下异常: System.InvalidOperationException : Showing a modal dialog box or form when the application is not running in UserInteractive mode i

我正在使用Cruise Control.NET和NAnt在我们的代码库上自动运行NUnit测试。某些测试导致显示Windows窗体。当从VS或NUnit GUI手动运行这些测试时,它们工作正常。当通过巡航控制服务运行时,我得到以下异常:

System.InvalidOperationException : Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.

除了完全排除测试或重写测试以不显示表单之外,还有其他方法可以修改测试或让NUnit在从服务调用时运行这些测试吗?

您可以始终登录用户,并将服务附加到用户会话()。但是,最好修改代码和测试,这样winform就可以抽象了。

我通常用属性[Explicit]标记这些测试,这样它们只会在显式运行时运行,而不会在CCNET服务器上运行。另一种方法是模拟屏幕的行为,这样就不需要显示屏幕。

您可以通过运行这些测试,而不是将CCNET作为服务执行


但是,我建议将不同级别的测试彼此分开。如果测试变得复杂,即需要更复杂的设置才能运行(例如,特殊用户交互),则此测试更像是集成或验收测试,而不是单元测试(即使它使用NUnit)。

此属性可以添加到单个测试方法或完整的测试夹具中