Das ist eine schwierige und offene Frage, die ich kenne, aber ich dachte, ich würde sie zu Boden werfen und sehen, ob jemand interessante Vorschläge hat.Wie soll ich einen Code-Generator testen?
Ich habe einen Code-Generator entwickelt, der unsere Python-Schnittstelle zu unserem C++ - Code (generiert über SWIG) bringt und Code generiert, der benötigt wird, um dies als WebServices verfügbar zu machen. Als ich diesen Code entwickelt habe, habe ich es mit TDD gemacht, aber ich habe meine Tests als spröde empfunden. Weil jeder Test im Wesentlichen sicherstellen wollte, dass ich für ein gegebenes Bit an Eingabecode (was zufällig ein C++ - Header ist) ein bestimmtes Bit an ausgegebenem Code bekam, schrieb ich eine kleine Engine, die Testdefinitionen aus XML-Eingabedateien liest und Test generiert Fälle von diesen Erwartungen.
Das Problem ist, ich fürchte, gehen Sie hinein, um den Code überhaupt zu ändern. Das und die Tatsache, dass sich die Einheit selbst testet, sind: komplex und b: spröde.
Also versuche ich an alternative Ansätze für dieses Problem zu denken, und es fällt mir auf, dass ich es vielleicht in die falsche Richtung gehe. Vielleicht muss ich mich mehr auf das Ergebnis konzentrieren, IE: Läuft der Code, den ich generiere, tatsächlich und macht, was ich will, anstatt dass der Code so aussieht, wie ich es möchte?
Hat jemand irgendwelche Erfahrungen von etwas Ähnliches, das sie teilen möchten?
Ich bin tatsächlich mit dem gleichen Problem konfrontiert, und keine der folgenden Antworten sind wirklich zufriedenstellend. Zugegeben, Sie können die Teile eines Codegenerators testen. Das Problem ist, woher wissen Sie, dass der generierte Code korrekt ist, d. H., Dass es keine Regressionen oder Ähnliches gibt, und wie schreiben Sie daher automatisierte Tests für generierten Code (ob Unit- oder Integrationstests genannt)? –
@James: Es gibt keine einfache Antwort, gibt es ... Ich habe diese Frage nur noch einmal gelesen und die Antworten und alle Probleme, die ich damals hatte, kommen zurück. Ich werde das in den nächsten Wochen noch einmal versuchen, weil ich von Zeit zu Zeit verschiedene Regressionen bekomme und es immer wichtiger wird, diese zu erkennen. – jkp
Es ist ein großer, massiver String-Vergleich. Könnte einfacher sein mit einem AST – Nikos