Tengo un debate con un colega programador sobre si es una buena o una mala práctica modificar un código de trabajo solo para que sea verificable (por ejemplo, mediante pruebas unitarias).
Mi opinión es que está bien, dentro de los límites de mantener buenas prácticas de ingeniería de software y orientadas a objetos por supuesto (no "hacer que todo sea público", etc.).
La opinión de mi colega es que modificar el código (que funciona) solo para fines de prueba es incorrecto.
Solo un ejemplo simple, piense en este fragmento de código que usa algún componente (escrito en C #):
public void DoSomethingOnAllTypes()
{
var types = Assembly.GetExecutingAssembly().GetTypes();
foreach (var currentType in types)
{
// do something with this type (e.g: read it's attributes, process, etc).
}
}
He sugerido que este código se puede modificar para llamar a otro método que hará el trabajo real:
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
Este método toma un objeto de ensamblaje para trabajar, lo que hace posible pasar su propio ensamblaje para realizar las pruebas. Mi colega no pensó que esta es una buena práctica.
¿Qué se considera una práctica buena y común?