2017-11-29 3 views
-1

Fragen:Google Unit-Test in C++: Wie schreibt man eine persistente Datendatei?

1) Wo Dateien gehen, die von einem C++ Google Unit-Test erstellt werden?

2) Gibt es eine Möglichkeit, eine persistente Datendatei in einem C++ - Google Unit-Test zu schreiben, so dass die Datei nach dem Test zugänglich ist?

-Code und das gewünschte Verhalten

ich die Unit-Test auf Ubuntu 14.04 mit catkin_make läuft. Ich möchte, dass der Code irgendwo eine Datei schreibt, die ich nach den Testläufen finden kann. Der folgende Code schreibt eine Datei, aber ich weiß nicht, wohin sie geht oder ob sie nach Abschluss der Komponententests weiter besteht.

TEST(GUnitTestFileIo, Test_One) 
{ 
    std::ofstream csvFile; 
    csvFile.open("helloWorldTestFile.csv"); 
    if (csvFile.is_open()) { 
    csvFile << "Hello, World, !" << std::endl; 
    csvFile.close(); 
    } else { 
    std::cout << "Failed to open the file!" << std::endl; 
    } 
} 

int main(int argc, char **argv){ 
    testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 
+1

Fragen Debug-Hilfe zu suchen („warum nicht dieser Code zu arbeiten?“) Muss das gewünschte Verhalten umfasst, um ein bestimmtes Problem oder Fehler und der kürzeste Code, der notwendig ist, um es in der Frage selbst zu reproduzieren. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines [mcve]. Verwenden Sie den Link "Bearbeiten", um Ihre * Frage * zu verbessern - fügen Sie keine weiteren Informationen über Kommentare hinzu. Vielen Dank! – GhostCat

+0

Sie erklären nur vage, was Sie implementiert haben. Es ist sehr schwer zu sagen, was hier vor sich geht. In diesem Sinne: Versuchen Sie es, wenn Sie ein kleines (aber funktionierendes) Beispielstück zusammenfassen können, das alle relevanten Informationen über Ihre Arbeit enthält. – GhostCat

+0

Dies hängt sehr davon ab, wie Sie die resultierende ausführbare Datei aufrufen. Ist es die MSVC-Integration? CTest? Läuft es selbst? – Frank

Antwort

0

Eine Lösung besteht darin, einfach in einen absoluten Dateipfad zu schreiben. Der folgende Code schreibt eine Datei in den Home-Verzeichnis des Benutzers aus dem Innern eines Google-Unit-Test:

TEST(GUnitTestFileIo, Test_One) 
{ 
    char const* tmp = getenv("HOME"); 
    if (tmp == NULL) { 
    std::cout << "$(HOME) environment variable is not defined!"; 
    } else { 
    std::string home(tmp); // string for the home directory 
    std::ofstream csvFile; // write the file 
    csvFile.open(home + "/helloWorldTestFile.csv"); 
    if (csvFile.is_open()) { 
     csvFile << "Hello, World, !" << std::endl; 
     csvFile.close(); 
    } else { 
     std::cout << "Failed to open the file!" << std::endl; 
    } 
    } 
} 

// Run all the tests that were declared with TEST() 
int main(int argc, char **argv){ 
    testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
}