在C#中,有一个Exception类.出于测试目的,我希望能够将其StackTrace属性设置为任意字符串.StackTrace没有setter,所以我的第一次尝试是尝试使用反射:
Exception instance = new Exception("Testing");
PropertyInfo propertyInfo = typeof(Exception).GetProperty("StackTrace");
propertyInfo.SetValue(instance, "Sample StackTrace value", null);
Run Code Online (Sandbox Code Playgroud)
这会产生运行时错误:
System.ArgumentException : Property set method not found.
有什么办法可以设置StackTrace房产吗?更一般地说,有没有办法设置一个缺乏setter的属性?
Mat*_*son 10
您可以派生自己的异常类并覆盖StackTrace属性,该属性是虚拟的:
public sealed class MyException: Exception
{
public MyException(string message, string stackTrace): base(message)
{
_stackTrace = stackTrace;
}
public override string StackTrace
{
get
{
return _stackTrace;
}
}
private readonly string _stackTrace;
}
Run Code Online (Sandbox Code Playgroud)
请注意,要正确执行此操作,您应该真正实现所有标准异常构造函数,但对于单元测试,这可能不是绝对必要的.
有关更多详细信息,请参阅设计自定义例外:
| 归档时间: |
|
| 查看次数: |
4336 次 |
| 最近记录: |