繁体   English   中英

如何创建一个函数来告诉我语句是否在C#中引发异常

[英]how to create a function to tell me if a statement throws an exception or not in c#

我想让一个函数接受一条语句作为参数,可以是字符串,也可以是我不知道的其他类型,如果该语句的执行引发异常,则返回true,否则返回false。

这可能取决于某种“字符串”执行,我不知道如何在C#中执行。

确实,这样做的唯一原因是使测试代码更容易。

最好使用单元测试框架,例如NUnit或Visual Studio Team Test:

要说一个方法应该抛出一个异常,您可以添加ExpectedException属性,例如:

[Test]
[ExpectedException(typeof(ArgumentException)]
public void NullUserIdInConstructor()
{
    LogonInfo logonInfo = new LogonInfo(null, "P@ss0word");
}

如果您不添加此属性而方法抛出,则测试将自动失败。


为了完整起见,我还将回答您提出的问题:您无法执行字符串,但可以将Action作为参数传递。

bool ThrowsException(Action action)
{
    try
    {
        action();
        return false;
    }
    catch
    {
        return true;
    }
}

您可以像这样使用它,例如:

bool result = ThrowsException(() => { throw new NotImplementedException(); });

就我而言,这是没有办法的。

如果我正确理解了这一点,则需要以下内容:

public static bool ActionSucceeds(Action action, out Exception exception)
{
    try 
    {
        action(); 
        exception = null;
        return true;
    }
    catch (Exception ex)
    {
        exception = ex;
        return false;
    }
}

因此,现在我们对您的问题有了更好的了解...

我建议在编写可以捕获并响应异常的测试时,考虑使用现有的测试框架,例如NUnitMSTest

这些库提供了在执行过程中运行测试和捕获异常(预期和异常)所需的基础结构。 即使单个测试失败,这也允许运行整套测试。 您还可以使用提供的Assert实用程序来帮助测试故障情况,而不是直接引发异常。

您应该真正将代码的异常冒泡,该异常原本是用来检查所讨论方法的布尔值并以您喜欢的方式对其进行处理的。 异常非常适合处理特殊情况。 它不能很好地转换为尝试从方法返回true或false的情况。 多数民众赞成不是设计例外。 它给您的方法带来了不同的联系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM