2015-05-07 30 views
2

目前我有一個test文件夾,每個測試有多個源文件。在CMake上,我之前爲每個源文件定義了一個二進制文件,但決定現在應該將它們全部合併爲一個二進制文件,並使用GTest中的篩選器來選擇要運行的測試。這些源文件都沒有main()函數,但我猜GTest框架只是在運行時隱式調用它。在Google的C++測試框架中爲多個單元測試創​​建一個二進制文件

所以現在我創建了一個測試管理器源文件,它除了一個main()之外什麼都沒有,它調用InitGoogleTestsRUN_ALL_TESTS()幷包含所有的測試源文件。據谷歌稱,這是一種'最後的手段'。

我該如何正確地做到這一點?我真的應該爲每個測試源創建頭文件並在其中寫入聲明,然後將所有這些頭文件包含在我的測試管理器源代碼中?有沒有其他...更容易...做到這一點的方式?

回答

1

不,你不需要做任何特殊處理這些文件...

TEST_F的所有和類似的宏將被連接在一起,並運行。這是googletest魔法......

其實你不需要這個 「測試管理器源」 與main() - 只使用文件從googletest/googlemock分佈狀態:

gmockxxx/src目錄/ gmock_main.cc

gtestxxx/SRC/gtest_main.cc

0

將您測試所需的所有源文件和頭文件包含到一個項目中。除非在gtest初始化之前需要一些特殊設置,否則不需要包含「主」源文件。只要有兩個GTEST庫進行鏈接測試項目:

-lgtest -lgtest_main 

後者gtest_main庫包含了基本main()功能。

它在GTest Primer: Writing the main() function


描述你可能有一個情況,其中每個測試類依賴於多個源文件(其它一些輔助類)。您希望將這些測試類保存在單獨的可執行文件中以進行清潔測試,以確保它們中的每一個僅使用所需文件,而不依賴於其他測試類使用的文件。此解決方案也可能會縮短編譯時間。

在這種情況下,您必須讓您自己的測試運行器執行所有測試可執行文件,並可能打印哪些文件有錯誤。這對於Bash或Python很容易。