Escrito el 03/06/2024
xUnit: Legacy Code
Para testear código legacy hay varias estrategias. Se testea el nuevo código pero no el viejo de forma ordenada.
Sprout Method
Creando un nuevo método para agregar funcionalidad en vez de modificar el método legacy. Se modifican las parámetros o salidas para mantener la legibilidad y evitar modificar código que pueda romperse.
public class Calculadora
{
public int Sumar(int a, int b) // método legacy
{
return a + b;
}
public int SumarConImpuesto(int a, int b, double impuesto) // nueva funcionalidad
{
// Se aplica un impuesto al resultado de la suma
var suma = Sumar(a, b);
var totalConImpuesto = suma * (1 + impuesto);
return (int)totalConImpuesto; // Se convierte a entero si es necesario
}
}
Sprout Class
Creando una nueva clase para agregar funcionalidad en vez de modificar la clase legacy. Se utilizan las funciones legacy pero se incorporan las nuevas funcionalidades en la nueva clase, que es fácilmente testeable.
public class Calculadora // clase legacy
{
public int Multiplicar(int a, int b)
{
return a * b;
}
public double Dividir(double a, double b)
{
return a - b;
}
}
public class CalculadoraAvanzada : Calculadora // clase agregada
{
public int Multiplicar(int a, int b)
{
return base.Multiplicar(a, b);
}
public double Dividir(double a, double b)
{
if (b == 0)
throw new ArgumentException("No se puede dividir por cero.");
return base.Dividir(a, b);
}
}