2011-02-07 12 views
6

Czy można/łatwo kpić z metod dziennika NLog, używając Rhino Mocks lub podobnego?Czy można udawać metody log NLog?

+0

Spróbuj patrząc na http://slf.codeplex.com/ – Jon

+1

Zobacz szczegółowy wpis [Korzystanie NLog z Dependency Injection] (http: //blog.tonysneed .com/2011/10/09/using-nlog-with-dependency-injection /). Post wykorzystuje NInject jako przykład DI. –

Odpowiedz

2

Można kpić tylko z wirtualnych metod. Ale jeśli utworzysz interfejs do rejestrowania, a następnie zaimplementujesz go za pomocą NLog Możesz użyć iniekcji zależności, aw swoich testach użyj wyśmiewanego interfejsu, aby sprawdzić, czy testowany system (SUT) rejestruje to, czego oczekujesz od logowania.

 
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

Prostą odpowiedzią jest "nie". Patrząc na kod, zastrzyk zależności nie jest obsługiwany, co wydaje się raczej niedopatrzeniem, zwłaszcza że nie wydaje się trudne do wdrożenia (na pierwszy rzut oka).

Jedynymi interfejsami w projekcie są obiekty COM Interop i kilka innych rzeczy. Główna klasa betonu Logger nie implementuje interfejsu ani nie dostarcza wirtualnych metod.

Użytkownik może albo udostępnić interfejs samodzielnie, albo użyć Moles/TypeMock/innego frameworka izolacji, aby kpić z zależności.

9

Korzystanie Nuget: install-package NLog.Interface

Następnie: ILogger = new LoggerAdapter([logger-from-NLog]);

+0

Proste, ale skuteczne. Projekt Github jest tutaj, jeśli ktoś chce zobaczyć, co robi: https://github.com/uhaciogullari/NLog.Interface – killthrush

Powiązane problemy