Mock and Stub – Hacer stub a método que tienen parámetros por referencia

La sintaxis de RhinoMocks constraints para aplicar en Stub o Expect a veces puede resultar compleja. Su documentación es bastante completa pero en algunos casos dificil de seguir o implementar.

A continuación te dejo una breve entrada sobre cómo puedes resolver la papeleta de hacer stub sobré métodos que tienen parámetros por referencia, esto puede resultarte útil tanto para unit test de tu capa de dominio, como para flow expectation test de tu capa de servicio.

Leer más…

Mock and stub – Sobre arquitecturas de UnitOfWork con Reposity pattern

Una de mis primeras entradas al crear este blog, fue sobre una arquitectura sobre la capa de datos usando Unit Of Work, Repository Pattern y EntityFramework Code First, con el objetivo de desacoplar tu capa de datos del resto de las capas de tu aplicación donde está contenida la lógica, servicios, negocio…

Un objetivo derivado, al conseguir este desacople, es poder aplicar Mocks y Stubs sobre tu capa de datos. Mock a estas clases de unit of work y repository, haciendo stub sobre sus métodos de forma que los unit test sobre las capas superiores se mantengan siendo atómicos, independientes de la capa de datos, y por tanto mucho más rápidos que si deben acceder a estos datos. Esto por otra parte facilita una aproximación F.I.R.S.T de los unit test como menciono en otra entrada.

Leer más…

Trabajando con fechas UTC en C#

Parece algo trivial manejar las fechas y horarios en tu código a partir de DateTime o DateTimeOffset, pero pueden existir algunos casos donde el manejo de fechas puede traducirse en una pequeña pero molesta cantidad de errores o imprecisiones no deseadas, según el fin al que este destinado tu aplicación, y la geolocalización de los usuarios que la usen.

¿Alguna vez te has planteado en que zona horaria esta localizado el servidor que ejecuta tu código una vez lo despliegas a la nube? ¿En que podría afectar eso a la comparación de fechas para determinar aspectos sensibles de tu lógica? En esta entrada voy a profundizar en todo ello.

Leer más…

Mejorando el performance de tu app, trabajar con ConcurrentBag

Una aplicación puede tener un performance o rendimiento que no sean los óptimos por muchos motivos, pero uno de ellos puede ser el hecho de no trabajar bien con procesos que podrían paralelizarse y no se paralelizan.

En caso de paralelizar procesos además hay que tener en cuenta que tu aplicación va a trabajar con diferentes hilos, y que no todos los elementos de C# son seguros al ser manejados por diferentes hilos paralelos.

A continuación presento por qué usar ConcurrentBag, un elemento que implementa IEnumerable como pueda ser List, y que deberá sustituir a List si las vas a necesitar en un proceso con hilos paralelos que tienen subprocesos.

Leer más…

Mejorando el performance de tu app, trabajar con procesos en paralelo

En ocasiones es posible que tu aplicación este sufriendo un mal rendimiento como consecuencia de hacer diferentes procesos secuenciales sin que realmente exista una dependencia entre ellos.

Estos procesos son firmes candidatos a ser usados en paralelos en diferentes subprocesos de tu proceso principal, de forma que el tiempo que tu proceso principal tarda en ejecutarse sea igual al tiempo del peor de los subprocesos, y no una suma secuencial de los tiempos de cada subproceso.

A continuación te presento como hacer esto de forma simple. 

Leer más…

Cómo hacer Unit Test sobre EF DbContext

En anteriores entradas he presentado mecanismos para hacer Unit Test sobre métodos de lógica genéricos, que suelen ubicarse en una capa de dominio, y Flow Expectation Test sobre la capa de servicio. Ahora voy a presentarte la manera de hacer Unit Test sobre tu capa de datos.

En esta entrada presento una arquitectura que usa un patrón de diseño con Unit Of Work y Reposity Pattern. En esta otra entrada escribí sobre Rhino Mock como una de mis librerías favoritas para Unit Testing. Ahora voy a combinar ambas para hacer unit test a tus métodos de Unit Of Work, pudiendo simular una colección de datos en memoria como si de un acceso a base de datos se tratase, de forma que puedas probar tus métodos con consultas linq y testear así su resultado, siendo capaz de aproximarte cada vez al valioso TDD del que hablo en esta entrada.

Leer más…

Crea una API básica desde un proyecto vacío

Cuando creas un nuevo proyecto, ya sea de tipo WebApi o MVC, seguramente suelas utilizar plantillas. En muchos casos incorporan capacidad por encima de las necesarias, o condicionan tu desarrollo. No obstante es un muy buen punto de partida que se puede ajustar a tus necesidades. Suelen incluir unos controladores básicos, algunas vistas, les puedes incluir un mecanismo de autenticación y en ese caso te incluirán incluso modelo.

Sin embargo con las nuevas arquitecturas basadas en microservicios, es posible que no necesites nada de todo esto, y con unos simples servicios expuestos te sea más que suficiente para consumir la Api de un mircoservicio desde una aplicación SPA. Si este es el caso, en esta entrada te voy a mostrar como crear un proyecto de Api nuevo, sin utilizar ningún template, y haciendo uso de la clase StartUp en lugar de global.asax, como ya hacen muchos template, especialmente basados en .Net Core.

Leer más…

Cómo instalar y configurar swagger en .Net Core usando OAuth2

Vengo utilizando swagger para documentar mis desarrollo con API desde que lo descubrí, y ahora que estoy empezando a utilizar .Net Core para mis desarrollos, no podía dejar de utilizarlo.

En esta entrada te voy a explicar como instalar y configurar swagger íntegramente desde el startup de tu servicio de .Net Core.

Leer más…

Cómo crear dinámicamente un contexto de Entity Framework Core en tiempo de ejecución

A medida que me introduzco más en arquitecturas de microservicios, trato de explotar sus diferentes ventajas. Una de ellas es poder usar una tecnología diferente para cada microservicio, por lo que es la oportunidad perfecta para explorar dotNet Core.

Ya he creado una entrada previa centrada en Core, para validar un token generado desde un servicio creado con .Net Framework. Ahora presento esta otra entrada donde he vuelto a aprovechar la arquitectura de Unit of Work, Repository Pattern y Entity Framework Code First de la que hablo en una de mis primeras publicaciones, en esta ocasión se trata de usarla con Entity Framework Core y además reforzarla con la creación de contextos de datos de forma dinámica en tiempo de ejecución y manteniéndola desacoplada de las demás capas, de forma que Entity Framework sea algo particular de la capa de datos.

Leer más…

Error de serialización con objetos que aplican herencia.

Recientemente me he encontrado con un error al comunicar un objeto entre dos sistemas aplicando NServiceBus. Me ha resultado bastante curioso y creo que merece la pena una entrada para andarse con ojo con el tipo de asignación que hacemos entre objetos que aplican herencia entre sí.

A continuación te explico cuál es el problema. 

Leer más…