Creando proxys con Castle DynamicProxy

¡Hola!
En esta entrada vamos a ver algunas cosas básicas sobre proxys y cómo crearlos utilizando un estupenda librería llamada DynamicProxy. Esta librería forma parte del proyecto Castle que incluye, además de DynamicProxy, otras potentes librerías como el contenedor de IoC Windsor. Volviendo a DynamicProxy, seguro que consciente o inconscientemente la has utilizado muchas veces en alguna librería o framework que hayas incluido en algunos de tus proyectos.. en este post lo veremos. Continúa leyendo Creando proxys con Castle DynamicProxy

AutoMocker. Desacoplando los tests de los constructores

¡Hola!
En las dos anteriores entradas (aquí y aquí), hemos conocido un poco la herramienta Autofixture y cómo nos ayuda principalmente a aislarnos lo máximo posible en la etapa Arrange de los test y facilitar así nuestras refactorizaciones de código. Hoy vamos a ver otra herramienta similar, pero mucho más sencilla (y menos potente), AutoMocker. Está disponible directamente desde NuGet. Continúa leyendo AutoMocker. Desacoplando los tests de los constructores

Autofixture. Customización de Fixtures

¡Hola!
El otro día estuvimos viendo cómo podemos utilizar Autofixture para intentar mejorar la etapa de Arrange de nuestros tests y hacerlos más mantenibles; además, por si no fuese poco, también vimos cómo aumenta nuestra productividad ya que tenemos que escribir menos código, o más bien, menos código que no está directamente relacionado con el objetivo del test, por ejemplo, para probar x funcionalidad necesitamos una instancia de y, nos da igual su estado, simplemente la necesitamos, y ahí es donde Autofixture nos puede ayudar. Esto último no siempre es así, es muy posible que en ciertos test queramos crear instancias en un estado concreto ya sea porque es lo que estamos probando o porque está directamente relacionado, y para ello existen técnicas como factorías o builders (en el anterior post vimos algunas técnicas), pero Autofixture también nos permite personalizar cómo creamos los objetos. Continúa leyendo Autofixture. Customización de Fixtures

AutoFixture. Mejorando la mantenibilidad de nuestros tests

¡Hola!
Hoy vamos a dar un vistazo a una librería muy interesante para mejorar nuestros test, Autofixture. Esta librería nos va a permitir desacoplarnos de la etapa Arrange y poder refactorizar y añadir nuevas funcionalidades a nuestro código sin miedo a tener que tocar muchos test (a lo mejor para añadir un nuevo parámetro a un constructor), en resumen, mejorar la mantenibilidad de nuestros tests. Continúa leyendo AutoFixture. Mejorando la mantenibilidad de nuestros tests

Crear método genérico en tiempo de ejecución

¡Hola!
El otro día se dio el caso de que, utilizando la librería Akavache, necesitaba invocar un método genérico decidiendo el tipo en tiempo de ejecución. Me explico, el método que necesitaba ejecutar tenía la siguiente firma:

1
    static IObservable<T> GetObject<T>(this IBlobCache This, string key)

Realmente lo que vemos es un método de extensión al que le pasamos una key y nos devuelve el objeto correspondiente a esa key. Lo usaríamos de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
    class Person
    {
        public string Name { get; set; }
 
        public Person(string name)
        {
            this.Name = name;
        }
    }
    private static async Task DummyPerson()
    {
        var dummyPerson = await Akavache.BlobCache.LocalMachine.GetObject<Person>("dummy-key");
    }

Continúa leyendo Crear método genérico en tiempo de ejecución

Test de aprobación con ApprovalTests. Windows Forms, WPF, ASP y más

¡Hola!
En la anterior entrada dimos un repaso a algunos de los principales Reporters disponibles. Hoy vamos a echar un vistazo a qué cosas/tecnologías podemos testear con ApprovalTests, cómo se hace y si realmente merece la pena. Continúa leyendo Test de aprobación con ApprovalTests. Windows Forms, WPF, ASP y más

Test de aprobación con ApprovalTests. Reporters

¡Hola!
Si en la anterior entrada vimos los conceptos básicos de ApprovalTests, hoy vamos a echar un vistazo a los Reporters. Los Reporters son las herramientas que tenemos disponibles para tomar las decisiones cuando un test falla y nos sirven principalmente poder visualizar el resultado del test fallido, comparar los cambios que se han producido entre la versión correcta y la versión actual fallida, y decidir si los cambios fallidos en realidad son correctos. Continúa leyendo Test de aprobación con ApprovalTests. Reporters

Test de aprobación con ApprovalTests. Conceptos básicos

¡Hola!
El otro día haciendo la kata Gilded Rose (una de las más interesantes que he hecho), me encontré con una curiosa herramienta llamada ApprovalTests. Esta librería, que tiene ya unos cuantos años, nos ayuda a escribir test de aprobación. Este tipo de test los utilizaremos típicamente cuando nuestros Asserts sean muy costosos o queramos refactorizar código (como en la kata). Antes que nada, os recomiendo dejar de leer esta entrada y leer estas otras del blog Koalite que son mucho más interesantes (y con mejor criterio), y si no conoces el blog, ya puedes añadirlo a tus marcadores. Continúa leyendo Test de aprobación con ApprovalTests. Conceptos básicos

Decompilando async/await

¡Hola!
Como bien dice el título de la entrada, vamos a echar un vistazo al código que se genera cuando utilizamos async/await. Siempre hemos escuchado que async/await es azúcar sintáctico y que genera un montón de código; pues voy a intentar explicar aprender qué es lo que hace el código que se genera cuando utilizamos async/await, a ver si me sale.
Continúa leyendo Decompilando async/await

IEnumerator, IEnumerable y otras hierbas

¡Hola!
El otro día en el trabajo salió el tema de cuál es la diferencia entre IEnumerable e IList (entre otros) y, creyendo que tenía clara la respuesta, me di cuenta de que no tanto. Sí sabía que, por ejemplo, IList implementa IEnumerable, y que en un IEnumerable no se puede acceder por índice a un elemento, sino que debemos recorrerlo. Es un momento perfecto para escribir un post y aclarar mis ideas. En concreto vamos a ver las interfaces IEnumerator, IEnumerable, ICollection e IList, empecemos (espero no extenderme demasiado). Continúa leyendo IEnumerator, IEnumerable y otras hierbas