Ich arbeite in der Bildverarbeitung (hauptsächlich OCR) und frage mich, wie ich Unit-Tests in meine Entwicklung integrieren soll.
Ich benutze bereits Komponententests für "häufigere" Codearten, aber wenn ich mit Bildverarbeitungscode arbeite, bin ich mir nicht sicher, wie ich damit umgehen soll. Diese Art von Code benötigt immer eine Eingabe / Ausgabe von Bilddaten, und das Verspotten ist nicht offensichtlich. Im Moment mache ich hauptsächlich Integrationstests, aber die Ausführung dauert eine Weile. Ich möchte einige Ideen dazu haben, wie man diese Art von Code in Komponententests aufteilt, damit ich sie schneller ausführen kann.
Bearbeiten: Das Analysieren eines Zeichens kann viele Schritte umfassen, die mehrere Rotations-, Skalierungs- und Morphologieoperationen umfassen. Diese Schritte ändern sich häufig, während der Algorithmus entwickelt wird. Somit können sich die Eingabe und die erwartete Ausgabe während des Testens stark verändern. Jedes Zeichen kann 100x100 Pixel groß sein, so dass eine Hardcodierung im Code oder das Arbeiten mit generierten Daten nicht in Frage kommt.
quelle
Antworten:
Ich arbeite mit Videoaufzeichnungs- / Analyse- / Streaming-Software und wir hatten ein sehr ähnliches Problem. Unten war unsere Lösung, nicht sicher, wie es langfristig funktionieren wird, aber im Moment scheint es zu funktionieren.
Speichern Sie Ein- / Ausgabebilder als Ressourcen in Ihrem Unit-Test-Projekt. Lassen Sie dann den Komponententest überprüfen, ob bei Eingabe eines bestimmten Eingangs dieser bestimmte Ausgang erzeugt wird.
9/10 Mal, wenn Sie den Code überarbeiten und weitere Funktionen hinzufügen, wird sich das Verhalten Ihrer Bildverarbeitungsroutinen voraussichtlich nicht ändern. Wenn also plötzlich Unit-Tests fehlschlagen, liegt dies wahrscheinlich an einem Fehler.
Wenn Sie andererseits Änderungen am tatsächlichen Algorithmus vornehmen, führt dies auch zu einem Fehlschlagen des Komponententests. In diesem Fall müssten Sie manuell / visuell überprüfen, ob die Ergebnisse korrekt sind. Wenn sie gut aussehen, aktualisieren Sie die Bildressourcen, damit der Komponententest erneut bestanden wird.
In unserem Projekt haben wir schließlich "gefälschte" (oder, wenn Sie so wollen, verspottete) Videoquellen entwickelt, die uns Daten sowohl für die Eingabe als auch für die Ausgabe liefern können. Die Daten selbst sind jedoch keine Fälschungen. Sie wurden tatsächlich mithilfe von Hilfsdatenaufzeichnungsklassen von einem laufenden System erfasst, als wir manuelle Tests durchführten und prüften, ob alles funktionierte.
quelle