2012-05-10 47 views
3

我正在使用C++的谷歌測試框架。遵循文檔和示例,我最終爲每個創建的測試「.cc」文件創建了一個單獨的可執行文件。有沒有辦法創建一個可以調用我所有單元測試的單個可執行文件?googletest:如何將所有測試包含在一個可執行文件中?

我想將我的項目放在一個報告測試狀態的CI工具中,所以我希望只有一個XML輸入文件而不是很多。

我make文件的肉看起來是這樣的:

class1_unittest.o : $(USER_TEST_DIR)/class1_unittest.cc $(USER_DIR)/class1.h $(GTEST_HEADERS) 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_TEST_DIR)/class1_unittest.cc 

class1_unittest : class1.o day.o class1_unittest.o gtest_main.a 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -pthread $^ -o $(PROJECT_BIN)/[email protected] 

class2_unittest.o : $(USER_TEST_DIR)/class2_unittest.cc $(USER_DIR)/class2.h $(GTEST_HEADERS) 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_TEST_DIR)/class2_unittest.cc 

class2_unittest : class2.o day.o class2_unittest.o gtest_main.a 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -pthread $^ -o $(PROJECT_BIN)/[email protected] 
+0

你是否定義了'main'很多次?只需定義一次,並將所有'.cc'文件鏈接在一起。 –

+0

我的任何一個測試文件都沒有main。如果我放入一個,並調用「RUN_ALL_TESTS()」,我如何將cc文件鏈接到我的make文件中?這不像他們有彼此的課程可供參考。 – RepDetec

回答

2

你只需要在你的Makefile中單個目標的所有測試文件,並定義main(),無論是在測試文件中的一個或在一個單獨的main.cc中也需要包含在目標中。

正如docs所解釋的,各種版本的TEST()宏都將其測試用Google Test隱式註冊。這意味着你可以有一個獨立的main.cc,它只包含:

#include "gtest/gtest.h" 
int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 
相關問題