gpt4 book ai didi

c# - 与 Throws 方法类似的通用 DoesNotThrow 方法在哪里?

转载 作者:行者123 更新时间:2023-11-30 18:29:24 24 4
gpt4 key购买 nike

NUnit ExceptionAsserts documentation列出几种形式。除了重载,这些形式可用:

Assert.Throws(/* params here, incl. delegate w/ code */)
Assert.Throws<T>(/* params here, incl. delegate w/ code */)
Assert.DoesNotThrow(/* params here, incl. delegate w/ code */)

我在这里遗漏了一个,这也是我所期望的:

Assert.DoesNotThrow<T>(/* params here, incl. delegate w/ code */)

目前我只使用 DoesNotThrow可用的版本,并祈祷它永远不会隐藏确实指示问题的类型的异常。这确实不尽如人意。

我真的很想区分与测试相关的异常(例如 Assert.DoesNotThrow<SqlException> )和不相关的异常(例如 NullReferenceException )。这不是什么大事,因为非泛型 DoesNotThrow 断言不会影响何时测试将是红色/绿色,但它会影响如何它报告为红色。

在我开始创建自己的 Assert 扩展来处理这个问题之前,我想问:我在这里遗漏了什么吗?我想要的表格因某种原因无法使用吗?使用其他 NUnit 位是否可以轻松实现?

最佳答案

评论和缺乏答案表明在 NUnit 中没有这样的方法

正如评论中所建议的,您可以使用 DoesNotThrow非泛型方法只是忽略了一个事实,即其他类型的异常将显示与 Assert 失败相同类型的输出。

评论中的另一个建议是编写您自己的辅助方法,如果有人关心这里有一个可能的版本:

public static void AssertDoesNotThrow<T>(NUnit.Framework.TestDelegate testDelegate) where T : Exception
{
try
{
testDelegate.Invoke();
}
catch (T exception)
{
Assert.Fail("Expected: not an <{0}> exception or derived type.\nBut was: <{1}>",
typeof (T).FullName,
exception.GetType().FullName);
}
}

对于违反断言的测试委托(delegate),您会得到一个漂亮的“失败”和这种类型的输出:

Expected: not an <System.ArgumentException> exception or derived type.
But was: <System.ArgumentException>

对于意外错误,异常本身的测试失败。

至于我自己,我想我会接受这样一个事实,即这在 vanilla NUnit 中不存在,并继续使用非通用版本。

关于c# - 与 Throws<T> 方法类似的通用 DoesNotThrow<T> 方法在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com