2017-11-08 1 views
1

Ich versuche Unit-Test mit Gtest.kompilieren Reihenfolge Eclipse C++

Ich erstelle ein anderes Projekt, das Datei aus dem ursprünglichen Projekt (Durch Verknüpfung) hat, die getestet werden soll. Im neuen Projekt erstelle ich dann Fake Implementation und Mocks der zusätzlichen Abhängigkeiten der Funktion oder Unit, die ich testen möchte. In der Datei aus dem ursprünglichen Projekt verwende ich #ifdef, um ursprüngliche Abhängigkeiten oder die falsche Implementierung zu enthalten

Das Problem, mit dem ich konfrontiert bin, muss ich die Dateien in einer bestimmten Reihenfolge kompilieren, so dass die gefälschten Implementierungen enthalten sind, wenn Testprojekt ist bauen. Ich benutze MCUXpresso auf Windows 10 mit MinGW, GNU Builder

Antizipieren Sie jede Problemumgehung oder Möglichkeit, die Kontrolle über die Reihenfolge, in der Dateien kompiliert werden.

#ifdef IsTesting  //This is part or original project, original header files 
#include "Fake_dependency" 
#else 
#include "Original_Dependency" 
#endif 

Dann im neuen Projekt definiere ich

#define IsTesting true // Part of Test_Project, followed by other code for testing 

, wenn ich das neue Projekt oder Testprojekt kompilieren muß ich diese Datei diese Variable mit definierten kompiliert werden zuerst oder früher als die Datei, die ich bin Verknüpfen aus dem ursprünglichen Projekt

+0

Übersetzen Reihenfolge der cpp-Dateien ist egal. Vielleicht meinst du die Linkbestellung? –

+0

Die Reihenfolge der Zusammenstellung spielt in C++ keine Rolle. Sie müssen vielleicht die richtigen Header-Dateien in Ihre C++ - Datei einfügen ... –

+0

Ich verstehe nicht wirklich, warum die Reihenfolge für Ihre Situation relevant ist, aber wenn Sie in einer bestimmten Reihenfolge kompilieren müssen, können Sie Ihr eigenes Makefile erstellen . – Galik

Antwort

2

Anstatt IsTesting in Ihrem Testcode zu definieren, können Sie die Definition zu Ihrer Buildkonfiguration für das Testprojekt hinzufügen.

Zum Eigenschaften -> C/C++ Allgemein -> Pfade und Symbole -> Wählen Sie die gewünschte Sprache (GNU C++) und fügen Sie "IsTesting" (ohne Wert)

Wenn Sie Eclipse-wollen die kompilierte erhalten Code rechts (nicht kompilierter Code ist grau) müssen Sie umschalten Eigenschaften -> C/C++ Allgemein -> Indexer -> Verwenden Sie auch aktive Build-Konfiguration

+0

Danke für die Lösung. Es hat meine Neugierde ausgelöst. Wie weiß der Compiler über die in den Projekteinstellungen definierte Variable? – GSrd10

+0

Eclipse verwendet die Projekteinstellungen, um den automatisierten Build zu verarbeiten. Für mich bedeutet das, dass Eclipse den generierten Build-Befehl ändert. Aber ich denke, das hängt davon ab, welche Art von Build-System Sie verwenden. Am Ende ist es die * Build-Konfiguration * von der wir sprechen –