[MSVC] Symbole eines Projekts dem anderen bekannt machen
-
Hallo,
ich habe ein Projekt1 in Visual Studio 2013 und würde dazu gerne ein Test-Projekt erstellen, welches basierend auf Boost Test mein Projekt1 durchtestet. Projekt1 ist dabei eine exe, keine Bibliothek.
Mein Problem ist jetzt: Wie gestalte ich das Linken?
Mein Testprojekt kennt die Symbole von Projekt1 natürlich nicht. Ich las, dass man das über Verweise regeln kann. Wenn ich für das Testprojekt jedoch als einen Verweis das Projekt1 einstelle, ändert das nichts an den Linkerfehlern.
Wie kriege ich das hin?
-
Das ist aber eine sehr sehr ungewöhnliche Art von Test.
-
Man kann die Tests im selben Projekt halten oder in einem anderen der gleichen Mappe, das sind für boost test die vorgeschlagenen Möglichkeiten.
Wenn ich in meinem QT-Projekt aber eine Test-Konfiguration erstelle, wird keine Konsole angezeigt, ist also keine Möglichkeit, da ich die Testergebnisse nicht sehe.
Besserer Vorschlag?
-
Gibt verschiedene Möglichkeiten
-
Stell bei der Test-Konfiguration unter Linker/System/SubSystem auf "Console" um.
Vermutlich die einfachste und beste Möglichkeit. -
Alternativ könntest du auch die gesamte Applikation in eine DLL verlagern, und dann in der .exe nur mehr eine "MyDll::RunApplication" Funktion in der DLL aufrufen.
Dann hast du den ganzen Code in der DLL und kannst einfach ein 2. Test-Projekt machen welches z.B. "RunTests" statt "RunApplication" aufruft. -
Ruf in der Applikation
AllocConsole
auf. Dabei wirst du aber vermutlich noch die Standard-Streams neu verdrahten müssen:
http://stackoverflow.com/questions/9020790/using-stdin-with-an-allocconsole
Nachteil dabei ist aber dass z.B. Batch-Files nicht auf die Beendigung der Anwendung warten, da die Anwendung ja keine echte Konsolenanwendung ist, auch wenn sie nachträglich ein Konsolenfenster erzeugt.
Ein möglicher Vorteil dabei wäre dass du nicht unbedingt eine 2. Konfiguration brauchst, sondern die Tests einfach über nen Commandline-Switch aktivieren kannst. -
Das selbe wie (3), nur dass dein Programm dabei immer ne Konsolenanwendung ist. Wenn sie im "nicht-test" Modus gestartet wird kannst du die Konsole mit
FreeConsole
freigeben.
-
-
Hi!
- gefällt mir tatsächlich am besten und konnte ich jetzt nach einigen Prügeleien mit QT auch tatsächlich umsetzen.
Dankeschön!
- gefällt mir tatsächlich am besten und konnte ich jetzt nach einigen Prügeleien mit QT auch tatsächlich umsetzen.