Ich schaue mir gerade einige Komponententestbibliotheken in C ++ an und habe einige Fragen:
In boost.test scheint es keine Spottmöglichkeit zu geben, aber ich kann kaum daran denken, Unit-Tests zu machen, ohne Mock-Objekte / Funktionen zu erstellen. Wie würdest du das in boost.test machen, machst du es manuell (wie? Ich meine, es gibt mehrere Möglichkeiten, die mir gefallen, keine davon scheint nett zu sein) oder machst du einfach ohne Mock-Objekte?
googletest und googlemock sieht aus wie nette Bibliotheken mit Spottunterstützung, aber es erfordert jedes Objekt, das verspottet werden soll, virtuell zu sein. Ich mag das nicht wirklich, es ist nicht so, dass ich mir Sorgen um die Leistung mache (ich könnte ein Makro definieren, um es aus dem Produktionscode herauszubekommen), aber ich finde das sehr aufdringlich. Ich frage mich, ob es eine andere Lösung gibt, die nicht so viele Änderungen am bestehenden Code erfordert? (Liebe clojure dort)
Wie sonst würden Sie erwarten, dass etwas zum Schein wird? So funktioniert es in jeder anderen Programmiersprache! (Okay, nicht mit Duck Tippen, aber das trägt mehr Overhead als virtuelle Methoden) Wenn Sie über die Leistung besorgt sind:
Aber ich glaube nicht, dass die virtuellen Anrufe enorme Leistungsunterschiede verursachen werden. Der einzige Fall, in dem virtuelle Dateien fehlerhaft sind, sind die, in denen sie sich innerhalb innerer Schleifen befinden (wie in der iostream
-Bibliothek, wo sie möglicherweise für jedes Zeichen von Eingabe oder Ausgabe genannt werden) und selbst dann nur in leistungssensitivem Code.
BEARBEITEN: Ich vermisste das sehr wichtige Wort nicht in der obigen Frage # 2 - dass Sie nicht um die Leistung besorgt sind. Wenn das der Fall ist, dann ist meine Antwort, Sie sind effektiv geschraubt. Ein einfacher Funktions- oder Methodenaufruf in C ++ generiert einen einfachen Methodenaufruf, und Sie können nicht ändern, wo dieser Aufruf hinweist. In den meisten Fällen erfordert dies keine too viel Codeänderung, da korrekter C ++ - Code wo immer möglich Referenzen verwendet, die trotz der Tatsache, dass virtuals verwendet werden, nicht geändert werden müssen. Sie müssen jedoch auf jeden achten, der Wert Semantik verwendet, weil sie dem Slicing-Problem unterliegen werden.
Schildkröte wurde explizit für Boost.Test entworfen und sieht sehr gut aus ich.
Haftungsausschluss Ich arbeite bei Typemock.
Typemock Isolator ++ kann alles Mögliche nachmachen !! Sie brauchen nicht virtuell - alles ist Mockable
Siehe hier
Sie können also öffentlich, privat, abstrakt (ohne tatsächlich eine konkrete Klasse zu erstellen), nicht virtuelle Argumente, Live-Instanz usw. fälschen. Und... Es fälscht alles rekursiv
%Vor%Wir verwenden den folgenden Code
%Vor%Tags und Links unit-testing c++