强制变量评估的静态代码分析

时间:2015-07-01 10:22:57

标签: c# visual-studio-2013 resharper static-analysis code-inspection

我有这个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属性是否在其生命周期中被评估过。如果没有,则记录堆栈跟踪的警告。

0 个答案:

没有答案