我有这个C#解决方案,我们使用某种模式。函数返回true / false是否成功,以及某个值。如果函数返回false,则可能不使用该值。因此,在调用此类函数(使用此特定模式)的范围内,必须评估IsSuccessful
布尔值。
我们使用VS2013 + ReSharper 9.有没有办法自动检查代码中是否遵守了这种模式?如果使用这些工具是不可能的,还有其他工具吗?我的最后一招是编写一个执行静态代码分析的单元测试。
代码示例:
public ReturnValue<T> MyMethod()
{
try
{
....
return new ReturnValue<T>(someValue);
}
catch(Exception ex)
{
return new ReturnValue<T>(ex);
}
}
var returnValue = MyMethod();
if(!returnValue.IsSuccesful)
{
//Log error
return; //Can't go on, previous function failed
}
//Is successful continue code
public class ReturnValue<T>
{
public bool IsSuccessful { get; private set; }
public T Value { get; private set; }
public ReturnValue<T>(Exception ex)
{
IsSuccessful = false;
}
public ReturnValue<T>(T valueToReturn)
{
IsSuccessful = true;
Value = valueToReturn;
}
}
修改
我半解决了我的问题。创建对象后,将保存当前堆栈跟踪(new StackTrace()
)。在销毁对象时(当垃圾收集器清理它时),检查对象的IsSuccesful
属性是否在其生命周期中被评估过。如果没有,则记录堆栈跟踪的警告。