重构traceListener代码,以便对其进行单元测试

时间:2008-10-31 14:06:59

标签: c# unit-testing refactoring

我有以下代码:

private static void WriteStartupInfo()
    {
        Settings settings = Settings.Default;
        TimeSpan interval = settings.CleanupInterval;
        TimeSpan span = settings.ExpiryTimeSpan;
        string url = settings.TeamFoundationServerUrl; 
        StringBuilder sb = new StringBuilder();
        sb.Append(String.Format("CleanupInterval:{0}{1}", interval,Environment.NewLine));
        sb.Append(String.Format("ExpiryTimeSpan:{0}{1}", span,Environment.NewLine));
        sb.Append(String.Format("TeamFoundationServerUrl:{0}{1}", url,Environment.NewLine));
        Trace.TraceInformation(sb.ToString());
    }

这需要进行测试。我如何对此进行单元测试?

是否像删除跟踪侦听器和添加单元测试跟踪侦听器一样简单?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这取决于您正在测试的内容。您可以将方法分解为多种方法,以便您可以测试重要的功能。例如,如果要测试构建的字符串,请将其拉​​入单独的函数中!

private static void WriteStartupInfo()
{
    Trace.TraceInformation(GetStartupInfoString());
}

private static String GetStartupInfoString() {
    Settings settings = Settings.Default;
    TimeSpan interval = settings.CleanupInterval;
    TimeSpan span = settings.ExpiryTimeSpan;
    string url = settings.TeamFoundationServerUrl; 
    StringBuilder sb = new StringBuilder();
    sb.Append(String.Format("CleanupInterval:{0}{1}", interval,Environment.NewLine));
    sb.Append(String.Format("ExpiryTimeSpan:{0}{1}", span,Environment.NewLine));
    sb.Append(String.Format("TeamFoundationServerUrl:{0}{1}", url,Environment.NewLine));
    return sb.ToString();
}

现在可以独立测试字符串 - 我认为WriteStartupInfo()函数在那时是微不足道的,你不需要测试跟踪功能。

请注意,您可能需要调整方法的范围 - 我没有使用测试私有方法,所以我无法帮助那里。