C # Statisch Readonly log4net Logger, wie kann man den Logger im Unit Test ändern?

8

Meine Klasse hat diese Zeile:

%Vor%

Wenn ich zum Komponententest gehe, kann ich keinen moq-Logger in diese Schnittstelle injizieren, um Protokollaufrufe zu zählen.

Gibt es eine Möglichkeit, dies zu tun? Log4net empfiehlt statische Schreibmuster für Logger. Was ist der beste Weg, damit umzugehen?

    
AberAber 28.05.2013, 16:08
quelle

2 Antworten

9

Während log4net dieses Muster empfiehlt, hindert Sie nichts daran, den Logger außerhalb der Klasse zu instanziieren und zu injizieren. Die meisten IoCs können so konfiguriert werden, dass sie ein und dieselbe Instanz injizieren. Auf diese Weise können Sie für Ihre Komponententests einen Mock injizieren.

Ich würde einen Wrapper um LogManager.GetLogger empfehlen, der immer eine und dieselbe Logger-Instanz pro Typ zurückgibt:

%Vor%     
Sunny Milenov 28.05.2013, 19:38
quelle
0

Sie können MemoryAppender anstelle eines verspotteten Loggers verwenden. Auf diese Weise können Sie log4net so konfigurieren, dass die Protokollereignisse im Speicher gesammelt und nach GetEvents() zur Überprüfung abgerufen werden.

Ich habe diese nützlichen Beispiele gefunden:

Hier ist das erste:

%Vor%

Und je detaillierter:

%Vor%     
Vereb 11.10.2017 14:55
quelle

Tags und Links