Une partie de mon application dépend de JavaMail, de l'organisation des messages, etc. Est-il possible de tester ce module sans lancer un serveur IMAP pour exécuter les tests? Je suis toujours bloqué quand il s'agit de tester des choses qui dépendent de serveurs ou de modules externes.Test des modules JavaMail associés
Répondre
Ce que vous ne pouvez pas tester sans serveur IMAP est, si votre application envoie un e-mail. Mais toutes les autres choses que vous pouvez si vous concevez votre code correctement. Ce que vous devriez faire est de séparer votre dépendance. Qu'est-ce que ça veut dire?
Votre code doit accéder au code tiers (JavaMail dans ce cas) à un seul endroit (la plupart du temps == une seule classe). Séparez cette classe avec une interface du reste du code, de sorte que vous puissiez utiliser un objet factice dans vos tests.
Voici un exemple ce que vous ne devriez pas faire (en supposant JavaMail est la dépendance externe):
class Application {
public run(String[] receiverList, String message, String body) {
for (String receiver : receiverList) {
JavaMail.sendMessage(receiver, message, body);
}
}
}
Vous ne pouvez pas tester la boucle dans ce cas. Pour ce faire, à la place:
class Application {
private IApplicatioNMail mail;
public Application(IApplicationMail mail) {
this.mail = mail;
}
public run(String[] receiverList, String message, String body) {
for (String receiver : receiverList) {
mail.sendMessage(receiver, message, body);
}
}
}
class JavaApplicationMail implement IApplicationMail {
public sendMessage(String receiver, String message, String body) {
JavaMail.sendMessage(receiver, message, body);
}
}
De cette façon, vous pouvez créer un mannequin (maquette, peu importe) dans vos tests pour remplacer le JavaApplicationMail. Dans vos tests, la réception externe n'est jamais appelée).
Un test pourrait ressembler à quelque chose comme ça:
@Test
public void sentThreeMails() throws Exception {
IApplicationMail mailCounter = new MailCounter();
Application application = new Application(mailCounter);
application.run(new String[] { "one", "two", "three" }, "Hello", "Blah!");
assertEquals(3, mailCounter.calls);
}
class MailCounter implements IApplicationMail {
public counter = 0;
public sendMessage(String receiver, String message, String body) {
counter++;
}
}
Essayez d'utiliser cette mock pour votre test
À partir d'un serveur IMAP pour votre suite de tests pourrait effectivement être une bonne idée. GreenMail a été conçu dans ce but, il vous permet d'exécuter des serveurs IMAP/POP3/SMTP en mémoire à partir du code Java.
- 1. Affichage des objets associés
- 2. Performance Javamail
- 3. JavaMail ClassNotFound
- 4. JavaMail Question ou Bug?
- 5. JavaMail Lire les messages
- 6. JavaMail BaseEncode64 Erreur
- 7. Javamail, IMAP et Kerberos
- 8. Importer des modules avec des sous-modules depuis une bibliothèque
- 9. Compiler php avec des modules vs utiliser des modules partagés?
- 10. Test du code d'exemple dans les modules python
- 11. sortie QUnit: séparation visuelle des modules
- 12. erreur Connexion via javamail
- 13. aide javamail api
- 14. Hiérarchie des modules en guice
- 15. Supprimer des modules python?
- 16. Construire des modules magento
- 17. Collapse des fichiers associés dans Visual Studio
- 18. Regroupement des éléments associés dans PHP
- 19. Résolution des objets associés dans SL4 RIA
- 20. Regroupement des mots clés de recherche associés
- 21. Détermination des écrans/écrans/écrans associés
- 22. Comment charger des objets associés dans EF?
- 23. UIViews associés à des fuites de mémoire
- 24. Utilisation de JavaMail avec TLS
- 25. Doute dans le programme JavaMail
- 26. fichiers de modules importer dans des sous-modules
- 27. Python: Problème avec des modules locaux modules globaux shadowing
- 28. Envoyer javamail n'a pas exceptionns
- 29. Échec de l'authentification Javamail NTLM
- 30. performance des modules en Python