sbi*_*sbi 4 c# automated-tests hudson jenkins
我们在几个虚拟机上使用hudson/jenkins对我们的C#项目运行自动NUnit测试,这些虚拟机主要在某些服务器上无人值守.测试涉及启动几个交换数据的进程,其中一个是NUnit本身,另一个是由单元测试创建的.
有时,其中一个开发人员检查触发断言(Debug.Assert())的内容.然后弹出一个消息框,询问用户该做什么.通常这些发生在由单元测试创建的"外部"过程之一中.当其他进程放弃时,它们将阻止该进程,因为它们无法通信.但是,由于系统的性质,下一次测试也都会失败,只要阻止某个进程等待某人点击该消息框即可.
我被告知您可以更改.NET程序的设置,以便断言不会弹出消息框.理想情况下,该过程只会向stdout或stderr写一些内容,以便Jenkins记录.
那么我需要做些什么来关闭那些交互式断言对话框呢?
您需要实现System.Diagnostics.TraceListener,它不会在Fail上弹出对话框(即您可以向单元测试框架报告错误)并使用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());
Run Code Online (Sandbox Code Playgroud)
此代码应位于单元测试设置部分中.这种方式常规调试构建将显示断言对话框,但在运行单元测试时,它将为测试做一些合理的事情(如Assert.Fail).请注意,您应该考虑在测试的拆卸方法中恢复原始侦听器.