小编典典

我该怎么做才能使断言不再阻塞自动测试?

jenkins

我们在多个虚拟机上使用hudson / jenkins在C#项目上运行了自动化的 NUnit
测试,这些虚拟机在某些服务器上运行时几乎无人值守。测试涉及启动几个交换数据的过程,其中一个是NUnit本身,另一个是由单元测试创​​建的。

有时,一名开发人员会签入一些触发 断言
Debug.Assert())的内容。然后,这会弹出一个消息框,询问用户该怎么做。通常这些发生在单元测试创​​建的“外部”过程之一中。他们将
阻止该进程
而其他进程放弃,因为它们无法通信。但是,由于系统的性质,只要阻止了一个进程等待某人单击该消息框, 则下一个测试也将全部失败

有人告诉我可以更改.NET程序的设置,以便断言不会弹出消息框。理想情况下,该过程只需将一些内容写入stdout或stderr,供詹金斯记录。

那么,我该怎么做才能关闭那些交互式断言对话框?


阅读 278

收藏
2020-07-25

共1个答案

小编典典

您需要实现不会在失败时弹出对话框的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)。请注意,您应该考虑使用测试的拆解方法还原原始侦听器。

2020-07-25