Estoy comenzando con la prueba unitaria y tratando de hacer algo de TDD. He leído bastante sobre el tema y he escrito algunas pruebas. Solo quiero saber si el siguiente es el enfoque correcto.¿Cómo debo probar la unidad enviando correos electrónicos desde un controlador?
Quiero agregar la función habitual de "contáctanos" en mi sitio web. Ya sabes, el usuario completa un formulario con su dirección de correo electrónico, ingresa un breve mensaje y pulsa un botón para enviar el formulario de regreso.
Las carpetas modelo hacen sus cosas y mi método de acción acepta los datos publicados como modelo. El método de acción luego analizaría el modelo y usaría smtp para enviar un correo electrónico al administrador del sitio web indicándole que alguien completó el formulario de contacto en su sitio.
Ahora la pregunta .... Con el fin de probar esto, habría que tener la razón en la creación de una interfaz IMessageService que tiene un método Enviar (emailAddress, mensaje) para aceptar la dirección de correo electrónico y el cuerpo del mensaje. Implementa la inteface en una clase concreta y deja que esa clase se ocupe de cosas smtp y realmente envíe el correo.
Si agrego la interfaz como parámetro al constructor de mi controlador, entonces puedo usar DI e IoC para inyectar la clase concreta en el controlador. Pero cuando pruebas la unidad, puedo crear una versión falsa o simulada de mi IMessageService y hacer afirmaciones sobre eso.
La razón por la que pregunto es porque he visto otros ejemplos de personas que generan interfaces para SmtpClient y luego se burlan de eso. ¿Realmente hay alguna necesidad de ir tan lejos o no estoy entendiendo esto?
Estoy de acuerdo, y probablemente sea útil tan pronto como necesite ese IMailClientAsync t que pueda intercambiar. – Hal