Ich habe viele verrückte Methoden gesehen, um Zugriff auf private Variablen beim Komponententest zu erhalten. Das überwältigendste was ich gesehen habe ist #define private public
.Komponententests mit -fno-access-control
Allerdings habe ich noch nie jemanden gesehen, der vorschlägt, private Variablen auf der Compiler-Ebene auszuschalten. Ich hatte immer angenommen, dass du das nicht kannst. Ich habe mich bei vielen Entwicklern beschwert, dass das Testen von Einheiten viel einfacher wäre, wenn Sie dem Compiler nur sagen könnten, dass er sich für diese eine Datei zurückziehen soll.
Dann stolpere ich über die GNC-Compiler-Option-fno-access-control. Es ist so offensichtlich der perfekte Weg zum Komponententest. Deine originalen Quelldateien sind unmodifiziert, keine injizierten Freunde nur für den Komponententest, kein Neukompilieren mit bizarrer Präprozessormagie. Fangen Sie einfach mit dem Schalter 'keine Zugangskontrolle' an, wenn Sie Ihre Komponententests kompilieren.
Fehle ich etwas? Ist das die Einheit, die Silberkugel testet, hoffe ich es ist?
Der einzige Nachteil, den ich sehe, ist die gcc-spezifische Art der Technik. Ich vermute jedoch, MSVS hat eine ähnliche Flagge.
Haben Sie diese Technik ausprobiert? Funktioniert es tatsächlich? – UncleZeiv
Ich habe vor dem Stellen der Frage einen einfachen Testfall zusammengestellt. Es funktioniert tatsächlich. Ich habe es nicht mit irgendeinem wirklichen Leben oder einem großen Projekt versucht, aber ich nehme an, dass es perfekt skaliert. –
'-fno-access-control' funktioniert nicht mit privater/geschützter Vererbung. Ich stecke fest mit '# define's. – Xeverous