当前位置: 首页 > 面试题库 >

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

郭云
2023-03-14
问题内容

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

有时,一名开发人员会签入一些触发 断言
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)。请注意,您应该考虑使用测试的拆解方法还原原始侦听器。



 类似资料:
  • 我想使它从“游戏26”类到“游戏39”类,如果用户经历了从“游戏17”类到“游戏18”类。但如果用户没有通过,要使从“Game26”类到“Game30”类。

  • 问题内容: 我有一个树结构,其中每个都有一个父级和一个。每个节点都有一个,我想在其中选择进行查询,即该节点和所有父节点的标题。如何编写此查询? 单个标题的查询就是这样,但是就像我说的那样,我希望它扩展到整个父母分支。 干杯 尼克 问题答案: 您不能使用HQL进行递归查询。看到这个。如前所述,它甚至不是标准的SQL。您有两种选择: 编写特定于供应商的递归本机SQL查询 进行多个查询。例如: 我肯定会

  • 我正在编写if-else语句,如果满足某个条件,我希望程序什么也不做。下面的代码显示了我的意思。 如果number等于零,我希望程序保留这个If-else语句,并移动到下一段代码,这段代码在while循环中

  • 除了极少数例外 (一些文件系统操作的“同步”结束),没有一个 Vert.x Api 阻塞调用线程。 如果可以立即提供的结果,它将立即返回,你通常会提供一个handle来接收过一段时间的事件。 由于Vert.x API没有任何阻塞的线程,这意味着你可以使用Vert.x来处理只是使用小数目线程的大量并发。 常规阻塞API使用线程可能会阻塞: 从socket读取数据 向磁盘写入数据 向收件人发送一条消息

  • 本文向大家介绍怎样做到js无阻塞加载?相关面试题,主要包含被问及怎样做到js无阻塞加载?时的应答技巧和注意事项,需要的朋友参考一下 优化脚本位置,将js资源放在最后 减少外链脚本数量,将js资源压缩,优化速度 在页面加载完毕后再去加载脚本,window.onload里取加载脚本 script标签的defer与async属性 4.1 defer 异步下载,但是按照脚本顺序且是在dom渲染好后执行 4

  • 我的任务是为JMS客户机评估activemq artemis。我有RabbmitMQ的经验,但没有使用activemq artemis/JMS的经验。 我在本地机器上安装了artemis,按照说明创建了一个新的代理,并将其设置为windows服务。windows服务可以正常启动和停止。我没有对经纪人做任何改变。xml文件。 在我的第一个测试中,我试图从一个独立的java程序执行JMS队列生成/使用