Archivo de la etiqueta: Inyección de Dependencias

Rompiendo los limites: Mocking en las Pruebas Unitarias .Net

Mocking

Hoy por fin os traigo la unión entre las Pruebas Unitarias y la Inyección de Dependencias, el “Mocking“. ¿Que es el “Mocking” te preguntarás?, pues es la técnica utilizada para simular objetos en memoria con la finalidad de poder ejecutar pruebas unitarias. Esto, es especialmente útil cuando utilizamos recursos externos como bases de datos o servicios de mensajería, o cualquier cosa en general que no queramos o no podemos ejecutar durante las pruebas unitarias. Sin mas preámbulos, ¡vamos con ello! En primer lugar, he reutilizado el proyecto Entity Framework Core “Code First” para partir de tener el contexto de datos creado. Ademas, he añadido una clase “GeneradorInformes” (la cual cumple el patrón de Inyección de Dependencias en el constructor) y una clase “EmailSender” que implementa la interfaz “IEmailSender”: Proyecto //IEmailSender.cs namespace PostMocking.Model { public interface IEmailSender { bool Enviar(string Destinatario, string Mensaje); } } //EmailSender.cs namespace PostMocking.Model { public class EmailSender : IEmailSender { public bool Enviar(string Destinatario, string Mensaje) { //{…} return true; } } } //GeneradorInformes.cs using Microsoft.EntityFrameworkCore; using PostMocking.Data; using System.Linq; using System.Text; namespace PostMocking.Model { public class GeneradorInformes { //Propiedad con la dependencia private IEmailSender emailSender { get; set; } private PostMockingDbContext context { get; set; } public… Leer más »

Inyección de Dependencias en .Net Framework

Inyeccion de dependencias

Un mes ya… y hoy vengo a hablaros de la “Inyección de Dependencias” (DI). La inyección de dependencias consiste de manera resumida en evitar el acoplamiento entre clases utilizando interfaces. Gracias esto, conseguimos que cada clase tenga una función única, facilitando así el mantenimiento y el soporte de nuestro código. Esto que puede parecer un poco lioso a simple vista, y puede parecer mucho trabajo, se puede conseguir fácilmente cambiando levemente nuestro patrón de diseño. Vamos a imaginar que tenemos una clase que lee unos datos desde una base de datos con Entity Framework (“Database First” o “Code First“), y los envía por email: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using PostInyeccion.Models; namespace PostInyeccion { class Program { static void Main(string[] args) { GeneradorInformes generador = new GeneradorInformes(); generador.GenerarInforme(); } } internal class GeneradorInformes { internal void GenerarInforme() { //Obtenemos los datos desde el contexto using (PostDbContext contexto = new PostDbContext()) { var profesores = contexto.Profesores.Include(x => x.Cursos) .ThenInclude(x => x.Alumnos).ToList(); //Trabajo de maquetacion //……. //Enviamos el correo var emailSender = new EmailSender(); var envioOK = emailSender.Enviar(profesores); if(!envioOK) { //Registramos el fallo en un log } } } } public class EmailSender { public… Leer más »