Ich arbeite daran, meine Klassen mit Hilfe von Dependency Injection Unit-testbar zu machen. Aber einige dieser Klassen haben viele Clients, und ich bin noch nicht bereit, alle zu überarbeiten, um die Abhängigkeiten noch zu übergeben. Also versuche ich es allmählich zu tun; Behalten Sie die Standardabhängigkeiten vorerst bei, lassen Sie sie jedoch zum Testen außer Kraft setzen.
Ein Ansatz, den ich verfolge, besteht darin, alle "neuen" Aufrufe in ihre eigenen Methoden zu verschieben, z.
public MyObject createMyObject(args) {
return new MyObject(args);
}
Dann kann ich in meinen Unit-Tests diese Klasse einfach in Unterklassen unterteilen und die Erstellungsfunktionen überschreiben, sodass sie stattdessen gefälschte Objekte erstellen.
Ist das ein guter Ansatz? Gibt es irgendwelche Nachteile?
Ist es im Allgemeinen in Ordnung, fest codierte Abhängigkeiten zu haben, solange Sie diese zum Testen ersetzen können? Ich weiß, dass der bevorzugte Ansatz darin besteht, sie explizit im Konstruktor zu fordern, und ich möchte irgendwann dorthin gelangen. Aber ich frage mich, ob dies ein guter erster Schritt ist.
Ein Nachteil, der mir gerade aufgefallen ist: Wenn Sie echte Unterklassen haben, die Sie testen müssen, können Sie die Testunterklasse, die Sie für die übergeordnete Klasse geschrieben haben, nicht wiederverwenden. Sie müssen für jede reale Unterklasse eine Test-Unterklasse erstellen und diese muss die Erstellungsfunktionen überschreiben.