Je discute avec un collègue programmeur pour savoir s'il est judicieux ou non de modifier un élément de code fonctionnel uniquement pour le rendre testable (via des tests unitaires, par exemple).
Mon opinion est que c'est OK, dans les limites du maintien de bonnes pratiques d'ingénierie logicielle orientées objet et bien sûr (pas "rendre tout public", etc.).
Mon collègue est d'avis que la modification de code (qui fonctionne) uniquement à des fins de test est fausse.
Juste un exemple simple, pensons à ce morceau de code utilisé par un composant (écrit 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).
}
}
J'ai suggéré que ce code puisse être modifié pour appeler une autre méthode qui fera le travail réel:
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
Cette méthode utilise un objet Assembly sur lequel travailler, ce qui permet de transmettre votre propre Assembly pour effectuer les tests. Mon collègue ne pensait pas que c'était une bonne pratique.
Qu'est-ce qui est considéré comme une bonne pratique courante?
Type
comme paramètre, pas unAssembly
.