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

时间:2019-07-15 12:53:01

标签: c# .net unit-testing

因此,在pipeline{ agent any stages { stage('init'){ steps{ echo "init" } } } post { success { echo "sucess ${currentBuild.result}" } failure { echo "Failure ${currentBuild.result}" } } } 命名空间中,有一个断言函数Microsoft.VisualStudio.TestTools.UnitTesting用于测试Assert.ThrowsException<T>(Action)是否引发类型为Action的异常。

但是T意味着我必须事先知道将引发什么异常。

比方说,我正在创建一个方法,该方法应引发异常,该异常类似于代码仍为“流体”(规范仍在更改)的另一个方法。让我们叫我的函数<T>和另一个函数MyClass.Func

UpstreamClass.FuncMyClass都继承自UpstreamClass,后者定义了ICommonInterface

有没有一种方法可以断言,当在两个函数中都应抛出异常的联合参数时,抛出的异常是同一类型?

或者,在(虚构的)代码中:

public void Func(int)

1 个答案:

答案 0 :(得分: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)));