我正在WCF服务上运行一些单元测试。该服务配置为在故障响应中包含异常详细信息(在我的服务配置文件中包含以下内容)。.NET单元测试运行器输出FaultException.Detail
<serviceDebug includeExceptionDetailInFaults="true" />
如果测试引起故障是由客户端收到一个完全填充的服务器堆栈跟踪在服务器上未处理的异常。我可以通过调用例外的ToString()
方法来看到这一点。问题是,这似乎不是由我尝试过的任何测试运行器输出(xUnit,Gallio,MSTest)。它们似乎只输出异常的消息和StackTrace属性。
为了说明我的意思,下面的单元测试将输出三个部分:
- 错误消息
- 错误堆栈跟踪
- 标准控制台输出(包含我希望的信息,如“ Fault Detail等于ExceptionExtell,可能由IncludeExceptionDetailInFaults = true创建,其值为:...“
public void Test()
{
try
{
service.CallMethodWhichCausesException();
}
catch (Exception ex)
{
Console.WriteLine(ex); // this outputs the information I would like
throw;
}
}
编辑:不过,我更希望我不是被迫捕获异常中的每个测试,它以确定一个FaultException
对象的Detail
属性中的内容写入控制台。
例如,
public void Test()
{
service.CallMethodWhichCausesException();
}
有了这个信息将使得测试和部署少了很多痛苦的初始阶段。
我知道我可以只是包装每个单元测试在一个通用的异常处理和写入例外控制台,并重新抛出(如上)我所有的单元测试中,但似乎 实现这一目标的一个很啰嗦的方式(并且看起来很糟糕)。
有谁知道,如果有什么办法让每当未处理异常发生时包含这些信息?有没有我失踪的设置?我的服务配置缺乏正确的故障处理吗?也许我可以为某个单元测试框架编写某种插件/适配器?也许这是我应该使用的另一个单元测试框架!
我的实际设置是通过Gallio为开发环境执行的xUnit单元测试,但我确实有一套单独的“烟雾测试”套件,我希望我们的工程师可以通过xUnit GUI测试跑步者(或Gallio或其他)来简化最终部署。
感谢。
Adam Adam
谢谢,但我知道,控制台输出为t捕获他测试跑步者(并随后显示)。我正在寻找获取由测试运行器自动捕获和输出的`FaultException`的`Detail`属性的内容,用于未处理的异常(即,我不想避免在每个单元测试中编写一个异常处理程序只是为了显示这个额外但重要的信息)。 – Adam 2011-01-12 09:49:23