2011-02-07 14 views
6

¿Es posible/fácil simular métodos de registro NLog, utilizando Rhino Mocks o similar?¿Es posible simular los métodos de registro de NLog?

+0

Trate de mirar http://slf.codeplex.com/ – Jon

+1

ver post detallada [Utilización Nlog con la inyección de dependencia] (http: //blog.tonysneed .com/2011/10/09/using-nlog-with-dependency-injection /). La publicación utiliza NInject como un ejemplo DI. –

Respuesta

2

Solo puede simular métodos virtuales. Pero si crea alguna interfaz para el registro y luego lo implementa usando NLog Puede usar la inyección de dependencia y en Sus pruebas usar la interfaz simulada para ver si el sistema bajo prueba (SUT) está registrando lo que espera que se registre.

 
public class SUT 
{ 
    private readonly ILogger logger; 
    SUT(ILogger logger) { this.logger = logger;} 
    MethodUnderTest() { 
    // ... 
    logger.LogSomething(); 
    // ... 
    } 
} 

// and in tests 
var mockLogger = new MockLogger(); 
var sut = new SUT(mockLogger); 
sut.MethodUnderTest(); 
Assert.That("Expected log message", Is.Equal.To(mockLogger.LastLoggedMessage)); 
1

La respuesta simple es "no". Al mirar el código, no se admite la inyección de dependencia, lo que parece más bien un descuido, especialmente porque no parece difícil de implementar (a primera vista).

Las únicas interfaces en el proyecto están ahí para admitir objetos de interoperabilidad COM y algunas otras cosas. La clase principal Logger no implementa una interfaz ni proporciona métodos virtuales.

Puede proporcionar una interfaz usted mismo o utilizar Moles/TypeMock/otro framework de aislamiento para simular la dependencia.

9

Usando Nuget: install-package NLog.Interface

continuación: ILogger = new LoggerAdapter([logger-from-NLog]);

+0

Simple, pero efectivo. El proyecto Github está aquí si alguien quiere ver lo que hace: https://github.com/uhaciogullari/NLog.Interface – killthrush

Cuestiones relacionadas