我正在使用Cruise Control.NET和NAnt在我们的代码库上自动运行NUnit测试。某些测试会导致显示Windows窗体。当这些测试从VS或NUnit GUI手动运行时,它们可以正常工作。通过Cruise Control服务运行时,我得到以下异常:
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在从服务调用时运行这些测试?
答案 0 :(得分:1)
您可以始终登录用户,并将服务附加到用户会话(how to create interactive services)。但是,如果你修改你的代码和测试会更好,所以winform的东西是抽象的。
答案 1 :(得分:1)
我通常用属性[Explicit]标记这样的测试,所以它们只有在我明确地运行它们而不是在CCNET服务器上运行时才会运行。其他方法可能是模拟屏幕的行为,因此无需显示它。
答案 2 :(得分:1)
您可以通过executing CCNET from command line运行这些测试,而不是将CCNET作为服务执行。
但是,我建议将不同级别的测试彼此区分开来。如果测试变得复杂,即需要更复杂的设置才能运行(例如特殊用户交互),此测试更多的是集成或验收测试,而不是单元测试(即使它使用NUnit)。