我们在几个虚拟机上使用hudson / jenkins在我们的C#项目上运行自动 NUnit 测试,这些虚拟机在某些服务器上大多无人看管。测试涉及启动几个交换数据的进程,其中一个是NUnit本身,另一个是由单元测试创建的。
有时,其中一位开发人员会检查触发 断言 (Debug.Assert()
)的内容。然后弹出一个消息框,询问用户该做什么。通常这些发生在由单元测试创建的“外部”过程之一中。当其他进程放弃时,他们将 阻止该进程 ,因为他们无法进行通信。但是,由于系统的性质, 下一次测试也将失败 ,只要阻止某个进程等待某人点击该消息框。
我被告知您可以更改.NET程序的设置,以便断言不会弹出消息框。理想情况下,该过程只会向stdout或stderr写一些内容,以便Jenkins记录。
那么我需要做些什么来关闭那些交互式断言对话框呢?
答案 0 :(得分:6)
您需要实现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());
此代码应位于您的单元测试设置部分。这种方式常规调试构建将显示断言对话框,但在运行单元测试时,它将为测试做一些合理的事情(如Assert.Fail)。请注意,您应该考虑在测试的拆解方法中恢复原始侦听器。
答案 1 :(得分:-2)
不测试库的调试版本。您想知道在客户的计算机上运行时失败的内容,即Release版本。使用断言自动解决您的问题。