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

How to catch inherited exceptions in Xunit.net

所以我有一个名为 FoobarException 的自定义异常,并从中创建了一个新异常 FooException : FoobarException 下面抛出一个 FooException

Assert.Throws<FoobarException>(() => a.DoFoo(123));

然而断言失败了,因为它期望 FooException 被抛出。 "FooException" 不也是 FoobarException 吗?

不,不是 XUnit 检查它的方式。自己看,看代码:

XUnit Assert Exceptions

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

Assert.ThrowsAny<Foobar>(() => a.DoFoo(123));

并且仅就 "best practices" 而言,在创建异常时,始终以单词 "exception" 结束异常名称。上面的异常变为 FoobarException,这清楚地表明了 class 的用途。这是 C# 编码最佳实践中的一个非常合理的建议。