Czy można/łatwo kpić z metod dziennika NLog, używając Rhino Mocks lub podobnego?Czy można udawać metody log NLog?
Odpowiedz
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));
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.
Korzystanie Nuget: install-package NLog.Interface
Następnie: ILogger = new LoggerAdapter([logger-from-NLog]);
Proste, ale skuteczne. Projekt Github jest tutaj, jeśli ktoś chce zobaczyć, co robi: https://github.com/uhaciogullari/NLog.Interface – killthrush
- 1. Czy telefon może udawać klawiaturę Bluetooth?
- 2. Korzystanie sprężyny cloud udawać powoduje java.lang.NoClassDefFoundError: udawać/Logger
- 3. Czy log (n!) = Θ (n · log (n))?
- 4. nlog przy użyciu metody connectionStringName do rejestrowania bazy danych
- 5. NLog performance
- 6. Czy można wymusić niepowodzenie recaptcha v2 w celach testowych? (To znaczy udawać robotem)
- 7. Czy log (a * b) jest zawsze szybszy w programie Matlab niż log (a) + log (b)?
- 8. Git log: log przyszłych wersji
- 9. Forward nagłówek żądania z klientem RequestInterceptor udawać
- 10. Czy można uzyskać nazwę metody z poziomu metody w PHP?
- 11. Czy aspektj można dodać metody do java.lang.String
- 12. Czy można stosować prywatne metody przedłużania?
- 13. Czy można zidentyfikować metody aliasowe w Ruby?
- 14. Czy można łączyć metody z różnych cech?
- 15. NLog rotacja i czyszczenie logów
- 16. Dlaczego nie działa konfiguracja $ {basedir} NLog?
- 17. dział log-log z seaborn jointgrid
- 18. Log nazwa metody i numer linii w Timber
- 19. Jak zmusić NLog do nadpisania pliku dziennika
- 20. SoapHttpClientProtocol log response xml
- 21. Wysyłanie wyników ELMAH przez NLog
- 22. NLog: Formatuj plik z Whitespaces
- 23. Log SOAP Wiadomości
- 24. Czy można zbudować drzewo Fenwick w O (n)?
- 25. Właściwy sposób rejestrowania się w dzienniku zdarzeń za pomocą NLog
- 26. Nie można określić przyczyny awarii z Xcode Crash Log
- 27. Posiadanie rejestratorów NLog o innej konfiguracji
- 28. NLog nie tworzy pliku dziennika
- 29. dalej od log4net do NLog
- 30. nlog argumenty za errorException wiadomości
Spróbuj patrząc na http://slf.codeplex.com/ – Jon
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. –