1

Enterprise Library Logging 用のアダプターを作成していますが、コーディング標準に従って、単体テストを行う方法が必要です。

インターフェイスと実装は単純ですが、Logger.Write がログ エントリの特定のパラメーターで呼び出されたことを確認する方法が必要です。残念ながら、Logger.Writer にはセッターがなく、静的クラスをモックするツールもありません。

たとえば、アダプター メソッドが呼び出されたときに、基になるライターのイベント ID または重大度をアサートできるようにしたいと考えています。

4

1 に答える 1

1

カスタム tracelistener を実装し、ユニット テスト トレース リスナーとして使用できます。

[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>

その後、通常どおりライターを簡単に作成できます。

Logger.SetLogWriter(new LogWriterFactory().Create(), false);
于 2013-12-18T14:47:24.503 に答える