Décrit comment utiliser Mockito pour vérifier les messages du journal dans les tests unitaires.
Les principales bibliothèques sont les suivantes
Bibliothèque | version |
---|---|
Junit | 4.12 |
mockito | 1.10.19 |
log4j | 2.6.2 |
J'utilise Maven. Veuillez vous référer au lien ci-dessous pour la version détaillée. pom.xml
Les classes à tester sont les suivantes. L'appel de la méthode sayHello imprime un message dans le journal au niveau INFO. La sortie du journal utilise log4j.
HelloWorld.java
class HelloWorld {
private Logger logger = LogManager.getLogger(this);
void sayHello(String name) {
logger.info("Hello " + name);
}
}
Vous aurez besoin de l'objet Appender Mock pour obtenir les messages du journal. Préparez également un ArgumentCaptor pour obtenir la valeur de l'argument de l'objet Mock.
HelloWorldTest.java
@Mock
private Appender mockAppender;
@Captor
private ArgumentCaptor<LogEvent> logCaptor;
Définissez l'objet Appender préparé ci-dessus sur log4j. À ce stade, spécifiez la valeur à renvoyer par Mockito afin qu'il fonctionne comme un Appender lorsque l'objet mockAppender est appelé depuis log4j.
HelloWorldTest.java
Mockito.reset(mockAppender);
//Définissez le nom de l'appender
Mockito.when(mockAppender.getName()).thenReturn("MockAppender");
//Prêt à être utilisé en tant qu'appendeur (2 lignes du bas)
Mockito.when(mockAppender.isStarted()).thenReturn(true);
Mockito.when(mockAppender.isStopped()).thenReturn(false);
//Sortez l'enregistreur ROOT et réglez l'appender.
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();
Le code de test réel est le suivant. Extrayez le message de la méthode append d'Appender. Vous pouvez également vérifier le nombre d'appels. Cette fois, il est clairement spécifié comme 1 car c'est une fois.
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));
}
Décrit comment vérifier les messages du journal à l'aide de Mockito pour obtenir les arguments de l'objet Appender append. Cela permet la vérification au niveau du journal ainsi que les messages.
Avant de savoir comment faire cela, j'ai eu beaucoup de mal à analyser la sortie des chaînes dans le fichier journal. Dites adieu à de telles difficultés.
Le code source est disponible ci-dessous. Si vous souhaitez l'essayer, veuillez vous y référer.
https://github.com/hiroyuki-kaneko/testforlog
Recommended Posts