¿Cómo utilizar la librería mock para pruebas unitarias en Stream Manipulation?
La programación eficaz requiere un enfoque cuidadoso y meticuloso, especialmente cuando se trata de pruebas unitarias. Estas pruebas son vitales para garantizar que cada componente de tu aplicación funcione correctamente. En el contexto del proyecto Stream Manipulation, hemos introducido la librería mock. Esta es una herramienta esencial para simular dependencias innecesarias en un código y enfocar las pruebas en la lógica de negocio. Veamos cómo funciona y cómo podemos sacarle el máximo provecho.
¿Qué función presenta una dificultad especial en el proyecto?
En nuestro proyecto, la función countAllCurrencies de la clase StringOperations tiene un comportamiento particular. Su objetivo es contar cuántas veces aparece un carácter específico dentro de un string. Sin embargo, también incluye una línea de código que genera un log con esa información, lo que no pertenece a la lógica de negocio que realmente nos interesa probar. La función countAllCurrencies se encuentra así:
publicintCountAllCurrencies(string input,char currency){int count = input.Count(c => c == currency); Logger.Log($"El carácter '{currency}' se encontró {count} veces.");return count;}
¿Por qué necesitamos la librería mock en este contexto?
Durante la ejecución de una prueba unitaria, no es necesario ni eficiente comprobar el resultado de una operación de log. Por lo tanto, aquí es donde entra en juego la librería mock. Al usar mock, podemos simular el comportamiento del logger para que no interfiera con las pruebas de nuestra lógica principal. La idea es aislar y centrarse solamente en el funcionamiento de la lógica sin ser interrumpidos por funciones auxiliares.
¿Cómo configurar y usar mock para simular dependencias?
Antes de proceder con el uso de mock, necesitamos instalar esta librería. Si estás utilizando Visual Studio, lo puedes hacer a través del administrador de paquetes NuGet. Aquí los pasos básicos:
Instalación de la librería mock:
Dirígete al administrador de paquetes NuGet en tu proyecto de prueba.
Busca la librería Moq y selecciona instalar.
Acepta las licencias necesarias.
Implementación en el código:
Importa la librería mock en tu archivo de prueba.
Crea un mock de la dependencia ILogger que utiliza la StringOperations.
usingMoq;// Creación del mockvar mockLogger =newMock<ILogger>();// Uso del mock en StringOperationsvar stringOperations =newStringOperations(mockLogger.Object);
Realización de una Prueba:
Redacta una prueba unitaria para countAllCurrencies.
Haz los assertions necesarios para confirmar que la lógica del count es correcta sin preocuparte por el logger.
publicvoidCountAllCurrencies_ShouldReturnCorrectCount(){// Arrangevar mockLogger =newMock<ILogger>();var stringOperations =newStringOperations(mockLogger.Object);string input ="hello Plexi";char target ='l';// Actint result = stringOperations.CountAllCurrencies(input, target);// Assert Assert.Equal(3, result);// Hay 3 'l' en "hello Plexi"}
¿Qué hacer si surge un error?
Es posible que enfrentes errores relacionados con la simulación de la dependencia o el conteo erróneo de caracteres. Si experimentas algún problema:
Verifica que el tipo en el mock coincide con el tipo en la clase.
Comprueba manualmente la lógica de conteo asegurando que el resultado esperado sea correcto.
Si la referencia del mock aparece como nula, recompila el proyecto y verifica nuevamente las instancias.
Al final, la integración exitosa de la librería mock mejora drásticamente la capacidad de efectuar pruebas unitarias eficaces y rápidas. Te permite concentrarte únicamente en la lógica que deseas probar, sin distracciones por funcionalidades secundarias, como el logging. Continúa practicando y explorando para ganar más experiencia en este apasionante campo. ¡Sigue con nosotros para descubrir más sobre las capacidades avanzadas de la librería mock!
Se corta un poco el video en el minuto 5:16, por si no es algo intencional jaja
Comando para descargar la libreria de moq en VS code: dotnet add package Moq
Graciaaas
using Microsoft.Extensions.Logging;```using Microsoft.Extensions.Logging;
Esta extension es requerida para usar `\<ILogger\<StringOperations>>`
Moq es un marco de pruebas unitarias para .NET que se utiliza para crear objetos simulados (mocks) de manera fácil y rápida. Moq nos ayuda a aprovechar toda la potencia de C# para crear “mocks” limpios y mantenibles.
supongo q los objetos mock nunca van a generar errores en las pruebas porque justamente son simulaciones para q estas sean independientes...es así?
En teoria si, puedes crear moqs para simular las respuestas de servicios externos y con esto hacer que no dependan de ninguna otra cosa
Solo debes tener en cuenta que el el moq debe estar bien estructurado
Le agregué al metodo CountOccurrences que ponga en minusculas todo el input