Le Touilleur Express

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

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.

0 no like

Derniers articles

  • Capabilities.txt : ou comment expliquer les capacités de votre site web à un Agent

    Dans cet article, je vous propose de découvrir et de réfléchir à

    4 likes

    3 août, 2025
  • Le développement augmenté, un avis politiquement correct, mais bon…

    Puisque chacun y va de sa vidéo YouTube sur le génial Claude

    3 likes

    31 juillet, 2025
  • Comment j’ai codé un MVP en une vingtaine d’heures avec Claude Code

    Jeudi dernier, j’étais dans les bureaux de Back Market Paris, avec quelques

    2 likes

    30 juillet, 2025

Mots clés

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

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur X (Twitter) : @nmartignole

Copyright© 2008 - 2024 Nicolas Martignole | Tous droits réservés
  • A propos de l’auteur
  • A propos du Touilleur Express
  • Reset Password

Le Touilleur Express