Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Xunit.net中捕获继承的异常_C#_Xunit.net - Fatal编程技术网

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我不知道无论这个问题有多旧都会有什么问题,但感谢新的链接!)