为了账号安全,请及时绑定邮箱和手机立即绑定

断言我的 C# 函数抛出与另一个函数相同的异常

断言我的 C# 函数抛出与另一个函数相同的异常

C#
拉风的咖菲猫 2023-06-25 13:23:18
因此,在Microsoft.VisualStudio.TestTools.UnitTesting命名空间中有一个断言函数Assert.ThrowsException<T>(Action),用于测试是否Action抛出类型为 的异常T。但这<T>意味着我必须事先知道会抛出什么异常。假设我正在创建一个方法,该方法应该抛出类似于另一个代码仍然“流动”(规范仍在变化)的方法的异常。让我们调用我的函数MyClass.Func和另一个函数UpstreamClass.Func。(MyClass和都UpstreamClass继承自ICommonInterface,它定义了public void Func(int))有没有办法断言,当在两个函数中提供应该抛出异常的参数时,抛出的异常是相同的类型?或者,在(虚构的)代码中:// Assume -1 should generate an exceptionAssert.ThrowSameException(UpstreamClass.Func(-1), MyClass.Func(-1));
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

你可以使用这样的方法:


public static bool AllThrowSameException(params Action[] actions)

{

    Type lastExceptionType = null;

    foreach (Action action in actions)

    {

        try

        {

            action();

            return false;

        }

        catch (Exception ex)

        {

            if (lastExceptionType?.Equals(ex.GetType()) == false)

                return false;

            lastExceptionType = ex.GetType();

        }

    }


    return true;

}

测试将是:


Assert.IsTrue(AllThrowSameException(() => UpstreamClass.Func(-1), () => MyClass.Func(-1)));



查看完整回答
反对 回复 2023-06-25
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信