我们在多个虚拟机上使用hudson / jenkins在C#项目上运行了自动化的 NUnit 测试,这些虚拟机在某些服务器上运行时几乎无人值守。测试涉及启动几个交换数据的过程,其中一个是NUnit本身,另一个是由单元测试创建的。
有时,一名开发人员会签入一些触发 断言 (Debug.Assert())的内容。然后,这会弹出一个消息框,询问用户该怎么做。通常这些发生在单元测试创建的“外部”过程之一中。他们将 阻止该进程 而其他进程放弃,因为它们无法通信。但是,由于系统的性质,只要阻止了一个进程等待某人单击该消息框, 则下一个测试也将全部失败 。
Debug.Assert()
有人告诉我可以更改.NET程序的设置,以便断言不会弹出消息框。理想情况下,该过程只需将一些内容写入stdout或stderr,供詹金斯记录。
那么,我该怎么做才能关闭那些交互式断言对话框?
您需要实现不会在失败时弹出对话框的System.Diagnostics.TraceListener(即您可以向单元测试框架报告错误),并使用Listeners.Clear / Add添加此侦听器,而不是默认的侦听器。
public class MyListenerThatDoesNotShowDialogOnFail: System.Diagnostics.TraceListener {.... public override void Fail(string message, string detailMessage) {// do soemthing UnitTest friendly here } } System.Diagnostics.Debug.Listeners.Clear(); System.Diagnostics.Debug.Listeners.Add(new MyListenerThatDoesNotShowDialogOnFail());
该代码应在您的单元测试设置部分中。这样,常规的调试构建将显示断言对话框,但是在运行单元测试时,它将对测试做一些有意义的事情(例如Assert.Fail)。请注意,您应该考虑使用测试的拆解方法还原原始侦听器。