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

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

  • L’instant T où tu poses ta dém…

    Retour d’expérience sur la démission et le moment où vous devez quitter une entreprise.

    6 likes

    24 octobre, 2024
  • The « Robinson » projection – comprendre son système d’information

    Nous sommes en juillet 2022 chez Doctolib. Je travaille sur un projet

    5 likes

    22 octobre, 2024
  • Réussir son démarrage comme Staff/Principal Engineer dans une nouvelle entreprise

    Je prépare une présentation avec mon collègue Théotime pour la conférence Cloud

    3 likes

    6 octobre, 2024

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é (15) 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