Tengo un debate con un colega programador sobre si es una buena o mala práctica modificar un código de trabajo solo para que sea comprobable (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 con fines de prueba es incorrecto.
Solo un ejemplo simple, piense en este fragmento de código que es utilizado por 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 permite pasar su propio ensamblaje para realizar la prueba. Mi colega no pensó que esta sea una buena práctica.
¿Qué se considera una práctica buena y común?
Type
como parámetro, no unAssembly
.