Sagen wir, ich habe eine statische Methode, die zwei Objekte für eine enge Übereinstimmung vergleicht und ein gewisses Konfidenzniveau [0,1] zurückgibt.Wie gibt man optionale Debug-Informationen von einer Methode zurück?
Jetzt muss ich zusätzliche Debug-Informationen zurückgeben, die Vergleichsdetails enthalten, abhängig von einer Einstellung in der Konfiguration. Da diese Debug-Informationen nicht in der Produktion verwendet werden, sondern nur zu Testzwecken/Debugging-Zwecken, frage ich mich, was der geeignete Weg ist, um es zu implementieren.
Ich sehe mindestens drei Möglichkeiten:
1: Erstellen Sie eine zusätzliche Klasse CompareResult und speichern Vertrauen + optional gibt es Informationen. Füllen Sie die optionalen Informationen nicht aus, wenn Sie dies nicht benötigen.
Es scheint der sauberste zu sein, aber ich bin mir nicht sicher, ob ich das Ergebnis mit einer optionalen Option kombinieren sollte.
2: Verwenden Sie Ausgangsgröße (so können wir keine zusätzliche Klasse erstellen müssen, aber unsere Methodensignatur ein bisschen wachsen)
static double Compare(const Foo& foo1, const Foo& foo2, CompareOptionalInfo* out_compare_info = nullptr);
3: Getrennte vergleichen Methode mit optional-info Abrufverfahren .
static double Compare(const Foo& foo1, const Foo& foo2);
static CompareOptionalInfo GetCompareOptionalInfo();
Diese Option wahrscheinlich diese optionale-info zwischen den Methodenaufrufen speichern würde erfordern, und verschieben von statischen vergleichen Verfahren zum Beispiel Verfahren vergleichen. Aber ich bin mir nicht sicher, ob es angemessen ist oder nicht.
Aus Ihrer Erfahrung, was ist der geeignete Weg in der OOP-Welt, optionale Informationen (die meist nur im Debug-Modus verwendet werden) von einer Methode zurückzugeben?
Möchten Sie einen Debugger verwenden oder nur die zusätzlichen Informationen im Debug-Modus ausgeben? Wenn Sie gdb verwenden und Befehle wie 'call Foo :: compare (foo1, foo2)' verwenden wollen, können Sie 'compare_optional_info_' von Option 1 nicht anfordern. – Franck
Möchten Sie Ihren Produktionscode im Debug-Modus erstellen? testen, oder verwenden Sie ein separates Testprogramm? – Peter
Dies wird eine Meinungen basierte Frage sein (nicht wirklich zum Thema). Ich würde im Allgemeinen Unit-Test meine Funktionen als "Black Boxes", dass sie eine Spezifikation folgen und nur kümmern, was passiert, innerhalb (aus dubug Perspektive), wenn sie scheitern. Wenn es etwas gibt, das du wirklich testen willst, dann könntest du das vielleicht in eine eigene Funktion setzen, die testbar ist (Option 1 oder 2) und diese Funktion separat testen, anstatt die "API" mit Testdetails zu kompromittieren. Eine andere Möglichkeit ist * bedingte Kompilierung * Protokollierung von Informationen in der Funktion. – Galik