Pruebas unitarias con la librería Mock en C#

Clase 13 de 19Curso de Unit Testing con C# y .NET

Resumen

¿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í:

public int CountAllCurrencies(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:

  1. 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.
  2. 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.
using Moq;

// Creación del mock
var mockLogger = new Mock<ILogger>();

// Uso del mock en StringOperations
var stringOperations = new StringOperations(mockLogger.Object);
  1. 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.
public void CountAllCurrencies_ShouldReturnCorrectCount()
{
    // Arrange
    var mockLogger = new Mock<ILogger>();
    var stringOperations = new StringOperations(mockLogger.Object);
    string input = "hello Plexi";
    char target = 'l';

    // Act
    int 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!