gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:24 24 4
gpt4 key购买 nike

所以在 Microsoft.VisualStudio.TestTools.UnitTesting namespace 有一个 assert 函数 Assert.ThrowsException<T>(Action)测试是否 Action抛出 T 类型的异常.

但是<T>意味着我必须事先知道会抛出什么异常。

假设我正在创建一个方法,该方法应该抛出一个类似于代码仍然“不稳定”(规范仍在变化)的另一个方法的异常。让我们调用我的函数 MyClass.Func和另一个功能UpstreamClass.Func .

(MyClassUpstreamClass 都继承自 ICommonInterface ,它定义了 public void Func(int) )

有没有办法断言,当在两个函数中都应该抛出异常的参数时,抛出的异常是同一类型?

或者,在(编造的)代码中:

// Assume -1 should generate an exception
Assert.ThrowSameException(UpstreamClass.Func(-1), MyClass.Func(-1));

最佳答案

你可以使用这样的方法:

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)));

关于c# - 断言我的 C# 函数抛出与另一个函数相同的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com