Ich habe eine Debatte mit einem Programmiererkollegen darüber, ob es eine gute oder eine schlechte Praxis ist, ein funktionierendes Codestück nur so zu ändern, dass es testbar ist (z. B. durch Unit-Tests).
Meiner Meinung nach ist es in Ordnung, im Rahmen der Einhaltung guter objektorientierter und Software-Engineering-Praktiken (nicht "alles öffentlich machen" usw.).
Die Meinung meines Kollegen ist, dass es falsch ist, Code (der funktioniert) nur zu Testzwecken zu ändern.
Nur ein einfaches Beispiel: Stellen Sie sich diesen Code vor, der von einer Komponente (in C # geschrieben) verwendet wird:
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).
}
}
Ich habe vorgeschlagen, dass dieser Code geändert werden kann, um eine andere Methode aufzurufen, die die eigentliche Arbeit erledigt:
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
Bei dieser Methode wird ein Assembly-Objekt zur Bearbeitung benötigt, sodass Sie Ihre eigene Assembly übergeben können, um die Tests durchzuführen. Mein Kollege hielt das nicht für eine gute Praxis.
Was ist eine gute und gängige Praxis?
Type
als Parameter und nicht alsAssembly
.