Frage

Ich habe gerade mit großen physischen Abhängigkeiten mit der # include-Direktive zu schreiben Unit-Tests für eine Legacy-Code-Modul gestartet. Ich habe ein paar Möglichkeiten, um mit ihnen beschäftigt, die übermäßig mühsam fühlte (vorausgesetzt leer Header lange # include Abhängigkeitslisten zu durchbrechen, und mit #define zu verhindern, dass Klassen zusammengestellt werden) und wurde für den Umgang mit diesen Problemen für einige besseren Strategien suchen.

Ich habe seit häufig in das Problem mit einer leeren Version, um fast jede Header-Datei zu duplizieren, die Klasse zu trennen ich testen werde in seiner Gesamtheit, und dann erhebliche Stummel / Mock / gefälschten Code für Objekte Schreibe das wird ersetzt werden müssen, da sie nun nicht definiert sind.

Wer weiß, einige bessere Praktiken?

War es hilfreich?

Lösung

Die Depression in den Antworten ist überwältigend ... Aber keine Angst, wir haben

Andere Tipps

Da Sie Legacy-Code zu test Ich nehme an, Sie kann nicht gesagt refactor Code weniger Abhängigkeiten haben (zB durch Verwendung des Pimpl Idiom )

Das lässt Sie mit wenig Optionen, die ich Angst habe. Jeder Header, der für einen Typ oder eine Funktion benötigen ein Mock-Objekt für diesen Typ oder Funktion für alles enthalten war zu kompilieren, gibt es wenig Sie tun können ...

Ich antworte nicht, Ihre Frage direkt, aber ich bin, dass Unit-Tests Angst einfach nicht das, was sein können, zu tun, wenn Sie mit großen Mengen an Legacy-Code arbeiten.

ein XP-Team auf einem grünen Wiese Entwicklungsprojekt Nachdem er liebte ich wirklich meine Unit-Tests. Dinge geschehen, und ein paar Jahre später finde ich mich auf einem großen Vermächtnis Code-Basis arbeiten, die viele Qualitätsprobleme hat.

Ich habe versucht, einen Weg finden Einheiten Tests zur Anwendung hinzuzufügen, aber am Ende hätte gerade in einem Catch-22 stecken:

  1. Um was bedeutet volle Einheit zu schreiben, prüft der Code Refactoring werden müssten.
  2. Ohne Unit-Tests ist es zu gefährlich sein, den Code zu Refactoring.

Wenn Sie wie ein Held fühlen und die kühle-Hilfe auf Unit-Tests trinken, dann können Sie immer noch einen Versuch geben, aber es gibt ein Risiko, dass Sie mit nur mehr Testcode von geringen Wert am Ende, die jetzt muss auch sein beibehalten.

Manchmal ist es einfach am besten auf dem Code in der Art und Weise zu arbeiten, das ist „designed“ wird bearbeitet.

Ich weiß nicht, ob dies für Ihr Projekt arbeiten, aber Sie könnten versuchen, das Problem aus der Link Phase des Builds.

angreifen

Dies würde Ihr #include Problem vollständig beseitigen. Alles was Sie brauchen würde, ist zu tun, um die Schnittstellen in den enthaltenen Dateien neu zu implementieren zu tun, was immer Sie wollen, und verknüpfen Sie dann einfach auf die Mock-Objekt-Dateien, die Sie erstellt haben, die Schnittstellen in der Include-Datei.

implementieren

Der große Nachteil dieser Methode ist ein complected Build-System.

Wenn Sie halten Stubs / Mock / gefälschten Codes schreiben Sie auf eine Klasse zu tun Unit-Tests die Gefahr, dass dann ein anderes Verhalten hat, wenn sie auf dem Hauptprojekt zusammengestellt.

Aber wenn diejenigen umfasst sind da und haben kein zugesetztes Verhalten dann Ok es ist.

Ich würde nicht versuchen, etwas zu ändern auf die beinhaltet, während die Unit-Tests zu tun, so dass Sie sicher sind (sofern Sie auf Legacy-Code sein können :)), dass Sie den echten Code zu testen.

Sie sind auf jeden Fall zwischen einem Felsen und einem harten Platz mit Legacy-Code mit großen Abhängigkeiten. Sie haben eine lange, harte Schinderei voraus bekommen es zu sortieren, alle aus.

Von dem, was Sie sagen, es scheint, dass Sie versuchen, den Quellcode intakt für jedes Modul wiederum zu halten, ist es in einem Test-Harnisch Platzierung mit externen Abhängigkeiten verspottet werden. Mein Vorschlag wäre hier den noch tapferen Schritt zu versuchen, einige Umgestaltung nehmen zu beseitigen (oder Invert ) die Abhängigkeiten, die wahrscheinlich die sehr Schritt ist, dass Sie versuchen zu vermeiden.

Ich schlage vor, das, weil ich die Abhängigkeiten bin zu raten, gehen Sie zu töten, wie Sie Tests schreiben. Sie werden sicherlich besser auf lange Sicht sein, wenn Sie die Abhängigkeiten beseitigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top