2011-02-07 3 views
6

E 'possibile/facile simulare i metodi di log di NLog, usando Rhino Mock o simili?È possibile simulare i metodi di log di NLog?

+0

Prova a guardare http://slf.codeplex.com/ – Jon

+1

Vedi post dettagliato [Uso NLog con Dependency Injection] (http: //blog.tonysneed .com/2011/10/09/usando-nlog-con-dipendenza-iniezione /). Il post utilizza NInject come esempio DI. –

risposta

2

È possibile solo simulare metodi virtuali. Ma se crei un'interfaccia per la registrazione e la implementi usando NLog puoi usare dependency injection e nei tuoi test usare l'interfaccia mocked per vedere se il sistema sotto test (SUT) sta registrando ciò che ti aspetti che registri.

 
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 semplice risposta è "no". Guardando il codice, l'iniezione di dipendenza non è supportata, il che sembra piuttosto una svista, soprattutto perché non sembra difficile da implementare (a prima vista).

Le uniche interfacce nel progetto sono lì per supportare gli oggetti di interoperabilità COM e alcune altre cose. La classe principale di Logger non implementa un'interfaccia, né fornisce metodi virtuali.

È possibile fornire un'interfaccia o utilizzare Moles/TypeMock/un altro framework di isolamento per deridere la dipendenza.

9

Utilizzando Nuget: install-package NLog.Interface

Poi: ILogger = new LoggerAdapter([logger-from-NLog]);

+0

Semplice, ma efficace. Il progetto Github è qui se qualcuno vuole vedere cosa fa: https://github.com/uhaciogullari/NLog.Interface – killthrush