Wenn Sie mit einer großen Menge von Legacy-Code zu tun haben, der derzeit nicht getestet wird, ist es die richtige Entscheidung, jetzt eine Testabdeckung zu erhalten, anstatt in Zukunft auf eine hypothetische umfassende Neuschreibung zu warten. Mit dem Schreiben von Unit-Tests zu beginnen, ist nicht.
Ohne automatisierte Tests müssen Sie nach Änderungen am Code einige manuelle End-to-End-Tests der App durchführen, um sicherzustellen, dass sie funktioniert. Beginnen Sie damit, Integrationstests auf hoher Ebene zu schreiben, um diese zu ersetzen. Wenn Ihre App Dateien einliest, validiert, die Daten auf irgendeine Weise verarbeitet und die Ergebnisse anzeigt, die Sie mit Tests erfassen möchten.
Idealerweise verfügen Sie entweder über Daten aus einem manuellen Testplan oder können ein Beispiel der tatsächlichen Produktionsdaten zur Verwendung abrufen. Wenn nicht, da die App in der Produktion ist, macht sie in den meisten Fällen das, was sie sein sollte, also erstelle Daten, die alle Höhepunkte erreichen und nehme an, dass die Ausgabe vorerst korrekt ist. Es ist nicht schlimmer, als eine kleine Funktion zu übernehmen, vorausgesetzt, sie tut, wie es heißt, oder Kommentare legen nahe, dass dies der Fall ist, und Tests zu schreiben, vorausgesetzt, sie funktioniert ordnungsgemäß.
IntegrationTestCase1()
{
var input = ReadDataFile("path\to\test\data\case1in.ext");
bool validInput = ValidateData(input);
Assert.IsTrue(validInput);
var processedData = ProcessData(input);
Assert.AreEqual(0, processedData.Errors.Count);
bool writeError = WriteFile(processedData, "temp\file.ext");
Assert.IsFalse(writeError);
bool filesAreEqual = CompareFiles("temp\file.ext", "path\to\test\data\case1out.ext");
Assert.IsTrue(filesAreEqual);
}
Wenn Sie genug von diesen Tests auf hoher Ebene haben, um den normalen Betrieb der Apps und die häufigsten Fehlerfälle zu erfassen, müssen Sie viel Zeit auf der Tastatur verbringen, um zu versuchen, Fehler aus dem Code herauszufinden, die etwas anderes tun als was Sie dachten, dass dies zu einem erheblichen Rückgang führen würde, was das zukünftige Refactoring (oder sogar ein umfangreiches Umschreiben) erheblich vereinfacht.
Wenn Sie die Abdeckung der Komponententests erweitern können, können Sie die meisten Integrationstests reduzieren oder sogar einstellen. Wenn Ihre App Dateien liest / schreibt oder auf eine Datenbank zugreift, ist es naheliegend, diese Teile einzeln zu testen und sie entweder zu verspotten oder die Datenstrukturen zu erstellen, die aus der Datei / Datenbank gelesen werden. Das eigentliche Erstellen dieser Testinfrastruktur dauert viel länger als das Schreiben einer Reihe schneller und unsauberer Tests. und jedes Mal, wenn Sie einen 2-minütigen Satz von Integrationstests ausführen, anstatt 30 Minuten manuell zu verbringen, um einen Bruchteil dessen zu testen, was die Integrationstests abgedeckt haben, erzielen Sie bereits einen großen Gewinn.