因此,在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)));
- 1 回答
- 0 关注
- 120 浏览
添加回答
举报
0/150
提交
取消