0

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

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

4

5 回答 5

4

这样做的唯一原因是为了更容易测试我的代码。

最好使用单元测试框架,例如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(); });
于 2011-02-02T20:58:58.200 回答
1

就我而言,没有办法做到这一点。

于 2011-02-02T20:58:25.537 回答
1

如果我理解正确,你想要这样的东西:

public static bool ActionSucceeds(Action action, out Exception exception)
{
    try 
    {
        action(); 
        exception = null;
        return true;
    }
    catch (Exception ex)
    {
        exception = ex;
        return false;
    }
}
于 2011-02-02T21:00:13.477 回答
0

因此,现在我们为您的问题提供了更好的背景...

我建议要编写可以捕获和响应异常的测试,您可以考虑使用现有的测试框架,如NUnitMSTest

这些库提供了在执行期间运行测试和捕获异常(预期和未预期)所需的基础设施。这允许一整套测试运行,即使个别测试失败。您还可以使用Assert提供的实用程序来帮助测试失败条件,而不是直接抛出异常。

于 2011-02-02T21:05:40.033 回答
0

您真的应该将异常冒泡到代码中,该异常应该是为了检查您的方法的布尔值并以您喜欢的方式处理它。例外......非常适合处理例外情况。它不能很好地转化为尝试从方法返回 true 或 false。那不是例外的设计目的。它为您的方法带来了不同的含义。

于 2011-02-02T21:07:06.620 回答