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

因此,在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 exception

Assert.ThrowSameException(UpstreamClass.Func(-1), MyClass.Func(-1));


拉风的咖菲猫
浏览 121回答 1
1回答

尚方宝剑之说

你可以使用这样的方法:public static bool AllThrowSameException(params Action[] actions){&nbsp; &nbsp; Type lastExceptionType = null;&nbsp; &nbsp; foreach (Action action in actions)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; try&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; catch (Exception ex)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (lastExceptionType?.Equals(ex.GetType()) == false)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastExceptionType = ex.GetType();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return true;}测试将是:Assert.IsTrue(AllThrowSameException(() => UpstreamClass.Func(-1), () => MyClass.Func(-1)));
打开App,查看更多内容
随时随地看视频慕课网APP