2015-01-20 1 views
1

У меня есть цель NLog, которую я написал, которая предназначена для использования NLog LogEventInfo и записи ее в службы API Azure. У меня возникли проблемы с написанием модульного теста для регистратора, потому что я не могу понять, как перехватить сообщение, записываемое в APIServices.Log.Trace.Единичный тест пользовательский NLog target

Вот цель определение:

namespace Ariel.Mobile.Logging 
{ 
using System.Collections; 
using System.Collections.Generic; 
using System.Web.Http; 
using System.Web.Http.Tracing; 

using Ariel.Library; 

using Microsoft.WindowsAzure.Mobile.Service; 

using Ninject; 

using NLog; 
using NLog.Targets; 

/// <summary> 
/// Class to be used with NLog to write error and debug data to Azure for storage. 
/// </summary> 
[Target("Azure")] 
public class AzureTarget : Target 
{ 
    #region Fields 

    /// <summary> 
    /// Defines the mappings between NLog and Azure levels. 
    /// </summary> 
    private static readonly IDictionary<LogLevel, TraceLevel> LevelMap = 
     new Dictionary<LogLevel, TraceLevel> 
      { 
       { LogLevel.Trace, TraceLevel.Debug }, 
       { LogLevel.Debug, TraceLevel.Debug }, 
       { LogLevel.Info, TraceLevel.Info }, 
       { LogLevel.Warn, TraceLevel.Warn }, 
       { LogLevel.Error, TraceLevel.Error }, 
       { LogLevel.Fatal, TraceLevel.Fatal } 
      }; 

    /// <summary> 
    /// Gets or sets the Azure service to which messages will be sent. 
    /// </summary> 
    private readonly ApiServices services; 
    #endregion 

    public AzureTarget() 
    { 
     services = new ApiServices(ServiceConfig.Config); 
    } 

    #region Methods 

    /// <summary> 
    /// Method accepting NLog logging events to be transmitted to Azure. 
    /// </summary> 
    /// <param name="logEvent">The NLog event which needs to be persisted. 
    /// </param> 
    protected override void Write(LogEventInfo logEvent) 
    { 
     this.services.Log.Trace(LevelMap[logEvent.Level], logEvent.Message, logEvent.Exception); 
    } 

    #endregion 
} 
} 

Как я могу перехватить сообщение после входа в APIServices.Log.Trace в моем модульном тестировании?

ответ

0

Посмотрите на Microsoft Fakes.

Вы можете использовать Shim для перехвата вызова.