Code Copied

Unit Test在输出窗口输出Trace或Debug信息

当我们在coding一个类库时,常常会伴随一些测试,通常我们有几种土鳖方法:

  1. 创建一个控制台应用程序,在控制台应用程序调用类库里面的类方法,在控制台输出调用信息和结果。
  2. 创建一个Web应用程序,在Web应用程序调用类库里面的类方法,在Web页面输出调用信息和结果。

这2种方法确实可行,也是我遇到的程序员中较常用的做法。
但这并不是一种很明智的做法,我认为最好的做法是为这个类库创建Unit Test库。

Unit Test程序和测试应用程序的比较

缺点

相比于控制台或Web应用程序,Unit Test并不能如它们一样将信息输出到控制台或Web页面。
常言道“眼见为实”,没有见到确实的信息,我们心里终归对这样的测试还有一丝不安。

优点

  1. 开销:Unit Test不用像测试应用程序一样每次开启一个额外的窗口。
  2. 逻辑性:Unit Test在测试过程中逻辑性比测试应用程序更健全,Unit Test提供了很多Assert方法用于验证程序逻辑。
  3. 效率:Unit Test可以批量运行测试方法,但测试应用程序则难以实现。

为了也能够在Unit Test中查看一些输出信息,下面我将介绍一点小技巧:在Visual Studio输出窗口中通过Trace或Debug输出信息。

场景

ObjectHelperTest.cs是一个简单的Unit Test类,用于测试将一个object的属性转换为IDictionary<string,object>。

using System.Diagnostics;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace CrmLibrary.Test
{
    [TestClass]
    public class ObjectHelperTests
    {
        private Customer _customer; 

        [TestInitialize]
        public void TestInitialize()
        {
            _customer = new Customer()
            {
                FirstName = "Peng",
                LastName = "Sunny",
                Age = 26
            };
        }

        [TestMethod]
        public void TestToDictionary1()
        {
            IDictionary<string, object> attributes = _customer.ToDictionary1();
            Output(attributes);
        }

        private void Output(IDictionary<string, object> attributes)
        {
            foreach (var attr in attributes)
            {
                Debug.WriteLine("{0}:{1}", attr.Key, attr.Value);
            }
        }
    }
}

现在我们想要的效果是:通过Debug.WriteLine或Trace.WriteLine方法在Visual Studio的输出窗口输出信息。

操作步骤

1. 确认勾选【Define DEBUG constant】和【Define TRACE constant】选项。

项目属性(ALT + Enter)→ Build查看这2个选项。

勾选【Define DEBUG constant】选项时,Debug.WriteLine()方法才能在Debug模式下将信息输出到窗口。
勾选【Define TRACE  constant】选项时,Trace.WriteLine()  方法才能在Debug模式下将信息输出到窗口。

image

2. 在Test Explorer中,选中要测试的方法,右键选择Debug Selected Tests。

image

图中红框区域就是Debug.WriteLine输出的信息。

注意:Debug和Trace类的输出方法只能在Debug模式下输出信息,在Output窗口查看输出信息时请切换到Debug窗口。

image

3. 仅显示需要的输出信息

在Debug模式下,应用程序的Debug执行过程信息也输出来了,如果我们希望在输出窗口仅见到Debug.WriteLine的信息,则还要进行一步设置。

在输出窗口的右键菜单中,除了【Program Output】,其他项全部勾选掉。

image

清除输出窗口,再次运行Debug Selected Tests时,输出信息就看起来干净很多了。

image

想了解更多关于Trace和Debug信息,请参考:在 Visual C# .NET 中跟踪和调试

小结

  1. 建议使用Unit Test作为应用程序的测试方式。
  2. Trace和Debug输出的信息只能在Debug模式下可见。