【问题标题】:Unit testing Enterprise Library "Logger" Facade单元测试企业库“记录器”外观
【发布时间】:2013-10-08 14:18:07
【问题描述】:

我正在为 Enterprise Library Logging 编写一个适配器,根据我们的编码标准,我需要一种方法来进行单元测试。

接口和实现很简单,但我需要一种方法来检查是否已在日志条目上使用某些参数调用 Logger.Write。不幸的是,Logger.Writer 没有设置器,我也没有任何工具来模拟静态类。

例如,我希望能够在调用适配器方法时为底层编写器断言事件 ID 或严重性。

【问题讨论】:

    标签: unit-testing logging enterprise-library-5


    【解决方案1】:

    您可以实现自定义跟踪侦听器,并将其用作您的单元测试跟踪侦听器:

    [ConfigurationElementType(typeof(CustomTraceListenerData))]
    public class StubTraceListener : CustomTraceListener
    {
        private readonly static List<LogEntry> logEntries_ =
            new List<LogEntry>();
        private readonly static List<string> logMessages_ =
            new List<string>();
    
    
        public override void Write(string message)
        {
            StubTraceListener.logMessages_.Add(message);
        }
    
        public override void WriteLine(string message)
        {
            StubTraceListener.logMessages_.Add(message);
        }
    
    
        public override void TraceData(TraceEventCache eventCache,
            string source, TraceEventType eventType, int id,
            object data)
        {
            LogEntry le = data as LogEntry;
            if (le != null)
            {
                StubTraceListener.logEntries_.Add(le);
                if (this.Formatter != null)
                {
                    this.Write(this.Formatter.Format(le));
                    return;
                }
            }
            base.TraceData(eventCache, source, eventType, id, data);
        }
    
        internal static IList<string> GetLogMessages()
        {
            return new ReadOnlyCollection<string>
                (StubTraceListener.logMessages_);
        }
    
        internal static IList<LogEntry> GetLogEntries()
        {
            return new ReadOnlyCollection<LogEntry>
                (StubTraceListener.logEntries_);
        }
    
        internal static void Reset()
        {
            StubTraceListener.logEntries_.Clear();
            StubTraceListener.logMessages_.Clear();
        }
    

    }

    然后,在测试项目的 App.config 文件中包含跟踪侦听器,如下所示:

    <listeners>
          <add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0,Culture=neutral" 
               type="Path.To.Your.Project.Folder.StubTraceListener, Your.Test.Project.Name" name="MockTraceListener" />
    </listeners>
    

    然后你就可以像往常一样轻松地创建 writer:

    Logger.SetLogWriter(new LogWriterFactory().Create(), false);
    

    【讨论】:

    • 我不明白为什么这个答案(和问题)从来没有得到任何支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多