Tool zum automatischen Generieren von Mocks/Stubs/Dummies für Unit-Tests

Mein aktueller Arbeitgeber führt keine Unit-Tests durch (Schauder). Tatsächlich gibt es überhaupt keine hostbasierten Tests; alles ist getestet (black box) auf ziel. Und nichts davon kann automatisiert werden (das Grauen! das Grauen!).

Nach einigem Nörgeln wurde mir sehr widerwillig die Erlaubnis erteilt, Host-Tests zu untersuchen - zunächst auf Subsystemebene. Nicht ideal, aber es ist ein Anfang, und es kann für Schweinswale für Regressionstests automatisiert werden, und wenn es funktioniert, kann ich vielleicht sogar Unit-Tests ausprobieren.

Das Build-System für das Ziel hat nichts so Einfaches wie eine Make-Datei, oh nein, in der Tat. Es verfügt über ein Bash-Skript, das ein Perl-Skript ausführt, das einige Python-Skripte aufruft, die XML-Dateien verwenden, um Build-Befehle im laufenden Betrieb zu generieren.

Davon möchte ich mich fernhalten (vielleicht im nächsten Land, vielleicht sogar im nächsten Job).

Das Subsystem verfügt über mehr als 200 .CPP-Dateien. Weder die Quelle noch der Header enthalten die .H-Dateien, die sie benötigen, und verlassen sich lieber darauf, dass andere dies tun (das weitere Grauen! das weitere Grauen!). Meistens wird dies durch die treffend benannte enums.h (oder meine ich ungeschickt?) erledigt.


Frage : Ich suche nach einem Tool, das diese über 200 Quell- und zugehörigen Header-Dateien scannt und herausfindet, auf welche Klassen, Funktionen, Strukturen, Enumerationen usw Ich kann zum Testen erweitern?

Überlegt: Vielleicht könnte es einfach die Fehlermeldungen des Compilers/Linkers scannen, um festzustellen, was erstellt werden soll?

Windows oder Linux. Am liebsten kostenlos, aber da das so unwahrscheinlich ist, kann ich sie vielleicht dazu bringen, eine Lizenz zu bekommen , wenn es etwas Kommerzielles gibt, bei dem ich eine Demo ausprobieren kann .

Wichtig: Es muss der aktuelle Produktionscode unverändert verwendet werden können. Tools wie Google Mocks erfordern, dass ich Dinge als virtuell deklariere, nur um sie testen zu können.


[Update] Ich suche nach einer kostenlosen Lösung, die für die kommerzielle Nutzung lizenziert ist.

Jedes spöttische Framework ist auf virtuelle Methoden angewiesen. Das einzige Framework, das einige Einschränkungen auslässt, die ich kenne, ist Java, das PowerMockitoden Bytecode modifiziert, um einige normalerweise nicht erlaubte Aufgaben zuzulassen. C++ hat keine JVM und keine Reflektion, die Sie verwenden könnten, um mit Ihrer Idee davonzukommen. Falsche Objekte und Mock-Objekte sind Drop-in-Ersetzungen für tatsächliche Objekte - wenn Ihr Code so eng gekoppelt ist, dass Sie Implementierungen nicht austauschen können, wird Ihnen sowieso kein Framework helfen. In Ihrem Fallbuch könnte das effektive Arbeiten mit Legacy-Code von M. Feathers das sein, was Sie tatsächlich brauchen.
Was meinst du mit "referenziert, aber nicht deklariert"? Wie kann eine Codeentität verwendet werden, wenn sie nirgendwo eine Deklaration/Definition hat?
Ja, ein anderer Job, und ich habe das gleiche Problem. Gibt es dafür einen Markt, wenn ich es selbst entwickle?

Antworten (1)

Nicht kostenlos oder sogar billig , aber Sie können vielleicht eine Demo-Lizenz bekommen, aber das klingt wie ein Job für LDRA TBRun &/oder LDRAunit - das Schöne ist, dass es Ihnen ziemlich schnell sagen wird, welche Stubs benötigt werden, und das Framework dafür generiert , sowohl auf Einheitenebene als auch auf Teilsystemebene.

Es ermöglicht auch Einheitentests auf der Zielhardware sowie auf einem Host und bietet eine sehr gründliche statische Analyse und Datenflussanalyse, die beide gute Verkaufsargumente für Ihren Chef sein könnten.

Ich habe es viel verwendet und für mich ist es viel weniger Arbeit, nützliche Tests zu erstellen, als viele der Konkurrenten, die ich auch verwendet habe.

(NB Nur zur Klarstellung, ich arbeite nicht für LDRA, aber ich benutze es bei der Arbeit)

Das sieht sehr gut aus, @SteveBarnes. Haben Sie eine Vorstellung von den Kosten?
Ich denke, dass die Lizenz für das erste Jahr in der Größenordnung von 10.000 + liegt, je nach Option, und dann weniger für die Erneuerung jedes Jahres, aber das ist nur eine ungefähre Zahl. Wenn Sie in einer Branche tätig sind, in die sie gerne eindringen möchten, können Sie möglicherweise ein besseres Angebot erhalten. @Mawg
Tut mir leid, dass ich die Antwort nicht vergeben habe, Steve, aber das Unternehmen wird darauf nicht eingehen, und ich hätte gerne eine kostenlose Antwort auf diese Frage. Ich hoffe, dass es dir nicht allzu viel ausmacht.
@Mawg - Wenn ich eine kostenlose Antwort hätte, würde ich sie verwenden! Tut mir leid, dass ich Sie nicht auf einen hinweisen kann, in mehr als einer Hinsicht !