with read mail example authenticator java email testing

read - javax.mail maven



¿Cuál es la forma más fácil de burlarse de un servidor IMAP o POP para realizar pruebas unitarias? (4)

Esta pregunta ya tiene una respuesta aquí:

Quiero realizar una prueba unitaria de una aplicación Java que recupera correos de una bandeja de entrada de correo electrónico, como este tipo . Actualmente, ejecuto las pruebas unitarias contra un buzón real en el servidor de correo real de nuestra compañía que fue fácil de configurar, pero tiene las siguientes desventajas:

  • Tiene que enviar correos electrónicos reales antes de ejecutar la prueba
  • Agregar más casos de prueba puede ser difícil, por ejemplo, porque es posible que desee probar contra diferentes políticas de seguridad
  • La prueba depende de una conexión de red en funcionamiento con el servidor de correo y una cuenta de correo existente que combine el desarrollo y la administración del sistema de una manera que no tiene sentido para mí.

Me gustaría iniciar un servidor IMAP en un puerto local, que falsifica una bandeja de entrada basada en datos de prueba almacenados en archivos junto con las clases de prueba. Puedo pensar en los siguientes enfoques:

  • Ejecutar un servidor de socket e implementar un subconjunto IMAP rudimentario
  • Use una biblioteca de nivel superior hecha para construir servidores de correo electrónico
  • Utilizar una implementación de servidor de correo electrónico existente que pueda incrustar en mis pruebas.

Me gustaría evitar la primera opción, parece algo sencillo, pero supongo que por experiencia similar hay una larga cola de trabajo esperando en el futuro. Solo piense en querer probar conexiones seguras, etc. De manera similar, la segunda opción parece funcionar mucho, pero aún no he encontrado un servidor de correo que permita la tercera.

Si importa, estoy usando Maven y TestNG durante el proceso de construcción.


El proyecto Mock-JavaMail

Lo encontré al desarrollar un complemento para Jenkins, ¡y ha sido un sueño utilizarlo!

Simplemente coloque la dependencia en su proyecto y estará listo para comenzar (le dejaré a Kohsuke que le explique cómo configurarlo y usarlo).

Si estás impaciente, aquí tienes un ejemplo rápido de cómo se usa:

Ejemplo:

// Setup test: add mail to inbox Mailbox tmp = Mailbox.get("[email protected]"); tmp.add(/* your javax.mail.Message */) assertEquals 1, tmp.size() // Connect to the inmemory mailbox using "imap" Session session = Session.getInstance(System.getProperties(), null); Store store = session.getStore(''imap''); store.connect("bar.com","foo","anything"); // Check the mail exists! Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); assertEquals 1, inbox.getMessageCount() store.close();


Sugeriría incrustar un servidor Java IMAP / POP puro en su código de prueba.

Para eso, tienes numerosas posibilidades, incluyendo:

  • Escribe tu propio simulacro de IMAP usando Javamail
  • Usar servidor de correo enano
  • Use JMock para emular las distintas interfaces de su servidor de correo (después de todo, debe tener una interfaz, ¿no?)

Greenmail podría ser útil.

GreenMail es un conjunto de prueba de servidores de correo electrónico de código abierto, intuitivo y fácil de usar para fines de prueba. Soporta SMTP, POP3, IMAP con soporte de socket SSL.


Escriba una prueba que se base en un servidor de correo existente para verificar que su código pueda acceder a él. Este código debe hacer la configuración adecuada (es decir, debe enviarse un correo electrónico). Guarde esta prueba con alguna variable global o System.property para que pueda habilitarlo / deshabilitarlo en tiempo de ejecución.

Mueva el código para acceder al servidor en una clase aislada.

Anula esta clase en tus pruebas. En la prueba, simplemente verifique que el texto del correo sea correcto. Si obtiene un informe de error que indica que el acceso al servidor no funciona, habilite la "prueba de acceso al servidor real" y verifique.