.Net core CI/CD en AWS Serverless

Desde primeros de año esta disponible .Net Core 2.1.
AWS lambda soporta el runtime de .Net core (tanto 1.0, como 2.0 y 2.1).
AWS anuncia que la duración máxima de sus lambdas aumenta hasta los 15 minutos.
Para VSTS está disponible un toolkit de aws con tareas para gestionar el delivery
Para VS 2017 está disponible otro toolkit de aws con sdk para sus componentes.
La infraestructura como código cada vez es potente (IaC – Infrastucture as code).
Los skills DevOps cada vez son mas valorados.

Con todas estas noticias juntas es imposible no plantearse implementar pipelines para desplegar soluciones de .Net core en AWS Serverless a través de cloudformation templates, gestionando la pipelines desde VSTS y creando código debugable con VS 2017. Así que vamos a ello.

Leer más…

Mock and Stub – Hacer stub a propiedades privadas de una clase

En ocasiones he necesitado modificar el comportamiento de una propiedad privada de una clase, por ejemplo porque esa propiedad sea una clase de un repositorio en una arquitectura basada en Unit of Work y Repository Pattern como la que comento en esta otra entrada.

Esto es muy fácil de hacer con librerías de testing como pueda ser Rhino Mocks. 

Leer más…

Arquitectura software versatil, clean code y asequible a unit test o TDD

Es fácil entender lo que se busca cuando perseguimos tener el código bajo cobertura de unit test, así como es fácil entender porque aplicar el diseño dirigido por test (TDD – Test Driven design) es tan conveniente y sus ventajas. Sin embargo tratar de trasladar todo eso a la práctica en ocasiones no es tan fácil como se pinta.

En esta entrada doy algunos consejos sobre una arquitectura software versátil para afrontar estos y otros problemas. 

Leer más…

Documentar servicios con swagger: implementation notes y response class

Hasta ahora puedes encontrar diferentes cosas en este blog para una configuración básica de swagger como herramienta para documentar tus APIs.

Con esta entrada vas a darle algo mas de riqueza a la documentación sobre tus servicios. Con aspectos como “Implementation Notes” o el tipo devuelto por la respuesta en caso de tener 200 o diferentes códigos de error.

Leer más…

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…