Beschreibt, wie Mockito zum Überprüfen von Protokollmeldungen in Komponententests verwendet wird.
Die Hauptbibliotheken sind wie folgt
Bibliothek | Ausführung |
---|---|
Junit | 4.12 |
mockito | 1.10.19 |
log4j | 2.6.2 |
Ich benutze Maven. Die detaillierte Version finden Sie unter dem folgenden Link. pom.xml
Die zu testenden Klassen sind wie folgt. Durch Aufrufen der sayHello-Methode wird eine Nachricht auf INFO-Ebene in das Protokoll gedruckt. Die Protokollausgabe verwendet log4j.
HelloWorld.java
class HelloWorld {
private Logger logger = LogManager.getLogger(this);
void sayHello(String name) {
logger.info("Hello " + name);
}
}
Sie benötigen das Appender Mock-Objekt, um die Protokollnachrichten abzurufen. Bereiten Sie auch einen ArgumentCaptor vor, um den Wert des Arguments vom Mock-Objekt abzurufen.
HelloWorldTest.java
@Mock
private Appender mockAppender;
@Captor
private ArgumentCaptor<LogEvent> logCaptor;
Setzen Sie das oben vorbereitete Appender-Objekt auf log4j. Geben Sie zu diesem Zeitpunkt den von Mockito zurückzugebenden Wert an, damit dieser als Appender fungiert, wenn das mockAppender-Objekt von log4j aufgerufen wird.
HelloWorldTest.java
Mockito.reset(mockAppender);
//Legen Sie den Namen des Appenders fest
Mockito.when(mockAppender.getName()).thenReturn("MockAppender");
//Stellen Sie ein, dass Sie bereit sind, als Appender verwendet zu werden (untere 2 Zeilen)
Mockito.when(mockAppender.isStarted()).thenReturn(true);
Mockito.when(mockAppender.isStopped()).thenReturn(false);
//Nehmen Sie den ROOT-Logger heraus und stellen Sie den Appender ein.
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
loggerConfig.setLevel(Level.INFO);
loggerConfig.addAppender(mockAppender, Level.INFO, null);
ctx.updateLoggers();
Der tatsächliche Testcode lautet wie folgt. Extrahieren Sie die Nachricht aus der Append-Methode von Appender. Sie können auch die Anzahl der Anrufe überprüfen. Dieses Mal wird es eindeutig als 1 angegeben, da es einmal ist.
HelloWorldTest.java
@Test
public void outputLogMessage() {
String name = "World";
HelloWorld helloWorld = new HelloWorld();
helloWorld.sayHello(name);
Mockito.verify(mockAppender, Mockito.times(1)).append(logCaptor.capture());
String message = logCaptor.getValue().getMessage().getFormattedMessage();
Level level = logCaptor.getValue().getLevel();
assertThat(message, is("Hello " + name));
assertThat(level, is(Level.INFO));
}
Beschrieben, wie Protokollnachrichten mithilfe von Mockito überprüft werden, um die Argumente des Appender-Append-Objekts abzurufen. Dies ermöglicht die Überprüfung auf Protokollebene sowie Nachrichten.
Bevor ich wusste, wie das geht, hatte ich große Probleme, die in die Protokolldatei ausgegebenen Zeichenfolgen zu analysieren. Verabschieden Sie sich von solchen Nöten.
Der Quellcode ist unten verfügbar. Wenn Sie es ausprobieren möchten, beziehen Sie sich bitte darauf.
https://github.com/hiroyuki-kaneko/testforlog
Recommended Posts