C# 如何在Xunit.net中捕获继承的异常
因此,我有一个名为C# 如何在Xunit.net中捕获继承的异常,c#,xunit.net,C#,Xunit.net,因此,我有一个名为foobareException的自定义异常,并从中创建了一个新异常FooException:foobareException,下面抛出一个FooException Assert.Throws<FoobarException>(() => a.DoFoo(123)); Assert.Throws(()=>a.DoFoo(123)); 但是断言失败了,因为它期望抛出footexception。“FooException”不也是FoobarException吗
foobareException
的自定义异常,并从中创建了一个新异常FooException:foobareException
,下面抛出一个FooException
Assert.Throws<FoobarException>(() => a.DoFoo(123));
Assert.Throws(()=>a.DoFoo(123));
但是断言失败了,因为它期望抛出
footexception
。“FooException”不也是FoobarException吗?不,不是XUnit检查它的方式。要亲自查看,请查看代码:
如果要捕获任何异常或派生类型,则需要使用ThrowsAny
重载
Assert.ThrowsAny<Foobar>(() => a.DoFoo(123));
Assert.ThrowsAny(()=>a.DoFoo(123));
就“最佳实践”而言,在创建异常时,总是在异常名称的末尾加上“异常”一词。您上面的异常将变成
FoobarException
,这就清楚了类的用途。这是C#编码最佳实践中的建议,非常合理。感谢提供异常命名提示。我正要参加一个会议,却懒得在这里打字。我会出于历史目的更正它,以防有人再次遇到。顺便问一下,Xunit的文档在哪里?我看到了一个简单的FAQ,但我几乎找不到关于捕获异常的任何信息。链接可能已断开?@yair,但我不想更新原始问题,因为它会将一个3岁的已回答问题重新添加到主页上。@RonBeyer我不知道无论这个问题有多旧都会有什么问题,但感谢新的链接!)