JUNIT tester les log d’erreur
Il peut arriver des situations, ou l’on a envie de s’assurer qu’un log.error() est bien effectué lorsqu’on rentre dans une condition.
Exemple de classe à tester :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Component public class VendeurUtil { private static final Logger LOGGER = LoggerFactory.getLogger(VendeurUtil.class); // ... private void ajouterNouveauCompte(@Nonnull final Marchand vendeur, final PaymentInfoDTO paymentInfoDTO, @Nonnull final Devise devise, final TypeEtatKYC typeEtatHistoKYC, final Utilisateur currentUser, @Nonnull final Marketplace marketplace) { if (!(paymentInfoDTO instanceof IbanBankAccountInformation)) { LOGGER.error( "Les informations bancaire du vendeur {} de la marketplace {} n'est pas un 'IBAN' et n'est pas géré. Aucune infos bancaire ajoutées pour le vendeur.", vendeur.getIdShop(), marketplace.getCodeClient()); return; } } |
Et dans le teste on peut tester cela comme ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.read.ListAppender; import org.assertj.core.groups.Tuple; import static org.assertj.core.api.Assertions.assertThat; @RunWith(MockitoJUnitRunner.class)<br />public class VendeurUtilTest { @Before<br />public void init() { // log Logger logger = (Logger) LoggerFactory.getLogger(CantonnementService.class); logAppender = new ListAppender<>(); logAppender.start(); logger.addAppender(logAppender); } @Test public void createVendeurFromShopMarketplace_withoutBank_shouldAlertSupport() { //GIVEN : a non supported payment info myShop.setPayment_info(new UKBankAccountInformation()); //WHEN Marchand vendeur = instance.createVendeurFromShopMarketplace(myShop, marketplace, null, EUR, histoKYC, user, null); //THEN assertLogContains(logAppender, Level.ERROR, "Les informations bancaire du vendeur 1 de la marketplace CASTO n'est pas un 'IBAN' et n'est pas géré. Aucune infos bancaire ajoutées pour le vendeur.", null); } |
1 |
private assertLogContains(@Nonnull ListAppender<ILoggingEvent> logAppender, @Nonnull Level level, @Nonnull String formattedMessage, @Nullable<br /> Throwable throwable) {<br /> List<Tuple> expectedLogLines = logAppender.list.stream()<br /> .map(l -> new Tuple(l.getLevel(), l.getFormattedMessage(), l.getThrowableProxy() == null ? null : l.getThrowableProxy().getClassName(),<br /> l.getThrowableProxy() == null ? null : l.getThrowableProxy().getMessage()))<br /> .collect(toList());<br /><br /> assertThat(expectedLogLines).contains(<br /> new Tuple(level, formattedMessage, throwable == null ? null : throwable.getClass().getCanonicalName(),<br /> throwable == null ? null : throwable.getMessage()));<br />} |