当我直接在ToString()
上使用AggregateException
方法时,我获得了一整套嵌套异常:
public void GreenTest()
{
var ex = new AggregateException(new Exception("ex1"), new Exception("ex2"));
ex.ToString()
.Should()
.Contain("ex1")
.And
.Contain("ex2");
}
问题是当AggregateException
被包装在另一个例外时,我只得到第一个例外:
public void RedTest()
{
var ex = new Exception("wrapper", new AggregateException(new Exception("ex1"), new Exception("ex2")));
ex.ToString()
.Should()
.Contain("wrapper")
.And
.Contain("ex1")
.And
.Contain("ex2");
}
结果字符串中不存在 ex2
。这是AggregateException
类的错误还是一些众所周知的特性?
答案 0 :(得分:4)
我认为这不是一个错误。更多正常行为
问题是Exception
上的ToString()不会调用ToString()
的{{1}},而是调用异常类本身的私有innerException
方法
因此,ToString(bool,bool)
的被覆盖的ToString()方法不会被调用。
AggregateException的constructor会将innerException设置为传递给构造函数的第一个异常。
在您的情况下,这是AggregateException