如何在Xunit.net中捕获继承的异常

Whi*_*uit 2 c# xunit.net

所以我有一个自定义的异常调用FoobarException,从中我创建了一个新的异常FooException : FoobarException 以下引发了一个FooException

Assert.Throws<FoobarException>(() => a.DoFoo(123));
Run Code Online (Sandbox Code Playgroud)

然而,这种说法是失败的,因为它期待FooException被抛出.是不是"FooException"也是FoobarException?

Ron*_*yer 6

不,不是XUnit检查它的方式.要亲眼看看,请查看代码:

XUnit断言异常

如果要捕获任何异常或派生类型,则需要使用ThrowsAny重载.

Assert.ThrowsAny<Foobar>(() => a.DoFoo(123));
Run Code Online (Sandbox Code Playgroud)

只是出于"最佳实践"的问题,在创建异常时,总是以"异常"一词结束异常的名称.上面的例外就变成了FoobarException,这清楚地表明了这个类的用途.这是C#编码最佳实践,是非常合理的建议.