我该怎么做才能让断言不再阻止自动化测试?

时间:2011-03-31 17:56:43

标签: c# hudson automated-tests jenkins

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

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

我被告知您可以更改.NET程序的设置,以便断言不会弹出消息框。理想情况下,该过程只会向stdout或stderr写一些内容,以便Jenkins记录。

那么我需要做些什么来关闭那些交互式断言对话框呢?

2 个答案:

答案 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版本。使用断言自动解决您的问题。