Le Touilleur Express

  • Accueil
  • A propos de l’auteur
  • A propos du Touilleur Express

Mock JavaMail

9 décembre, 2008

A quelques heures de mon départ pour Devoxx je termine une petite démo basée sur Apache Camel et Apache Wicket. Je vous proposerai bientôt un grand article à tremper dans votre café mais là aujourd’hui je fais la version courte.

Si vous avez déjà eu à tester JavaMail dans votre application, je parle de tests d’intégrations, sachez qu’il existe une petite librairie bien sympathique pour « mocker » du code Java. Disons que vous souhaitez envoyer un email de votre interface Web pour remettre un mot de passe à zéro. Comment écrire un test unitaire sans utiliser un vrai serveur SMTP ?

Mock JavaMail permet de simuler une boîte aux lettres et de se comporter comme un serveur SMTP pour l’envoi, un serveur POP3 ou IMAP pour la réception.

Prenons par exemple un projet très simple. Voici tout d’abord la dépendance que j’ai ajoutée à mon fichier pom.xml :


       
            org.jvnet.mock-javamail
            mock-javamail
            1.7
        

Prenons ensuite un test unitaire qui génère un email afin de tester l’envoi. Tout d’abord voici le code à améliorer qui génère un email afin de l’envoyer via smtp

 private void sendSmtpEmail(Address from) throws MessagingException {
        Properties props = new Properties();
        //props.put("mail.smtp.host", "localhost");

        Session session = Session.getDefaultInstance(props, null);
        session.setDebug(true);

        // create a message
        SMTPMessage msg = new SMTPMessage(session);
        msg.setSubject("A simple test email");
        msg.setFrom(from);
        msg.setContent("Email content","text/plain");
        msg.setRecipients(MimeMessage.RecipientType.TO , "destinataire@yourdomain.com");

        Transport tr = session.getTransport("smtp");
        tr.connect("localhost", "anyUsername",  "password");

        msg.saveChanges();      // don't forget this
        tr.sendMessage(msg, msg.getAllRecipients());
        tr.close();
    }

Mock JavaMail se fiche pas mal du username et du password, donc vous pouvez mettre ce que vous voulez, tant que le serveur SMTP dans la construction de l’instance Transport est bien « localhost ».

Ensuite un exemple de code dans lequel je déclare un objet de type Mailbox, afin d’envoyer un email.

    public void testSendMail() throws Exception {
        Address address = new InternetAddress("destinataire@yourdomain.com");
        Mailbox mailbox = new Mailbox(address);


        assertTrue("The mock mailbox is not empty whereas it should be", mailbox.isEmpty());

        // Classical code to send an email to a smtp server
        sendSmtpEmail(address);

        // Get a fresh reference to the mailbox
        mailbox=Mailbox.get("destinataire@yourdomain.com");
        // Check that a mail has been received
        assertFalse("The mock mailbox is empty", mailbox.isEmpty());

        Message message=mailbox.get(0);
        assertEquals("A simple test email",message.getSubject());
    }

Vous pouvez maintenant facilement tester l’envoi des messages de votre application et vous assurer que tout fonctionne sans devoir passer par un FakeSMTP 🙂

Allez, rendez-vous à Devoxx.
J’ai déjà récupéré mon teeshirt du Paris JUG grâce à David, la fin de semaine s’annonce chargée.

Articles similaires:

Default ThumbnailCITCON 2009 Mock mock and mock Default ThumbnailJava Message Service JMS Default ThumbnailJBoss Seam 1.2.1 GA et l'encoding, allez la France Default ThumbnailComment configurer l'encoding en UTF-8 dans JBoss

Derniers articles

  • Vis ma vie de Staff/Principal Engineer

    Suite de l’article précédent sur le Staff Engineer. Aujourd’hui, voyons un peu

    20 juillet, 2022
  • Inari

    Devenir Staff Engineer : comment et pourquoi ?

    Après une dizaine d’années en tant que développeur, vous serez un jour

    17 juillet, 2022
  • WeAreDevelopers 2022, conférence à Berlin – jour 1

    Il est 8h40, 19 degrés, vous êtes à Berlin. La queue dehors

    24 juin, 2022

Tweets @nmartignole

Mots clés

Apple (32) Architecture (13) Big Data (5) Conference (8) Devoxx (55) Dev Web (37) Doctolib (2) geekevent (1) groovy (2) Innoteria (11) Java (517) Linux (10) Non classé (14) Perso (266) Recrutement (3) Scala (30) scrum (43) Société (3) Startup (20) Web 2.0 (67)

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur Twitter : @nmartignole

Copyright© 2008 - 2020 Nicolas Martignole | Tous droits réservés
  • A propos de l’auteur
  • A propos du Touilleur Express
  • Log In
  • My Account
  • My Profile
  • Reset Password

Le Touilleur Express