2016-02-25 102 views
2

我開始使用GoogleTest。看來,它需要一個主文件運行測試:如何避免使用GoogleTest混合測試和生產代碼?

Separate test cases across multiple files in google test

但目前在我的演示應用程序,我已經有一個主文件:

src/ 
-> MyType.h 
-> main.cpp 
-> Makefile 

最終將我的「生產」應用。我不想雜波與GTEST包括宏等

我應該創建另一個文件夾如其他的main.cpp文件:test/將包含所有特定GTEST配置,這樣我就結了:

src/ 
-> MyType.h 
-> main.cpp 
-> Makefile // Makefile for producing production code/binaries 
Test/ 
-> MyTypeTest.h // Unittest for MyType 
-> main.cpp // The "Test runner" 
-> Makefile // Makefile for producing test executable 

編輯:

找到此基礎上cmake的:

http://www.kaizou.org/2014/11/gtest-cmake/

這似乎正是我正在尋找。

+0

在項目變大之前,您可能想切換到其他構建系統。除非您已經有很多管理makefile的經驗,否則Makefiles往往會爲更大的項目而煩惱。 – smerlin

+0

我傾向於爲每個項目/庫設置一個測試子目錄,併爲每個測試源文件生成一個谷歌測試二進制文件。這樣,即使一個測試用例導致應用程序崩潰,所有其他測試和測試用例仍會運行。 (我使用'CMake'作爲構建工具,並使用'ctest'來運行所有測試) – smerlin

+0

我一直喜歡將測試的想法放在單獨的目錄中。 –

回答

2

最明智的做法,這是有一個庫爲您的生產代碼,然後兩個可執行文件,一個用於生產,另一個用於測試:

|-lib/ 
| |-Makefile 
| |-mytype.h 
| `-mytype.cpp 
|-app/ 
| |-Makefile 
| `-main.cpp 
`-test/ 
    |-Makefile 
    `-mytypetest.cpp 

注意GTEST分佈提供了gtest圖書館和gtest_main庫與您的測試可執行文件的標準主要功能。因此,除非您需要自定義主體(罕見情況),否則您不需要爲您的測試提供main.cpp,並且可以簡單地鏈接到gtest_main,例如。 $(CC) mytypetest.cpp -o apptests -lapplib -lgtest_main -lgtest

庫方法涉及稍微複雜Makefile S,但是在編譯時間不負有心人,因爲沒有它意味着你需要編譯mytype.cpp一次生產中的應用,並一次測試可執行文件。

+0

是的,它是這樣的,我想到了,我發現這個:http://www.kaizou.org/2014/11/gtest-cmake/,提供了更多的細節像你一樣的結構建議使用cmake。我會嘗試一下。 – u123

+0

這是我目前主要C++項目的源代碼結構。如果您打算使用cmake,您可以從其ExternalProject模塊中獲益,以將gtest庫導入到您的項目中。找到這個[這裏]的示例(https://github.com/apbarrero/cpp-utest/blob/master/test/CMakeLists.txt)。 –

+0

酷會看看!順便說一句你用什麼編輯器?我想與Git集成,並能夠建立/運行一個點擊/短鍵,所以我嘗試了Eclipse,但它並沒有真正做我想要的:http://stackoverflow.com/questions/35668159/cmake- 3-2-2-eclipse-4-5-1-cdt-8-0也許我在這裏有點太野心勃勃/需要去尋求更簡單/更人工的方法? – u123

0

可能有很多方法可以做到這一點,但一般來說,是的,您應該爲您的項目添加一個特定於測試的主函數。這使編譯更復雜一些,因爲你必須生成兩個單獨的二進制文件(一個用於應用程序,另一個用於測試),但這是一個相當典型的設置。

+0

確實有意義,正在考慮在src /和test /文件夾的上一級創建一個makefile文件,然後像在其中創建一個測試和產品目標,「make test」會創建測試可執行文件,「make prod」會創建prod可執行文件是針對所有約定還是合理的? – u123

+0

聽起來很合理,當然。我所使用的大多數Makefile項目都爲測試和生產可執行文件定義了不同的目標。即'make bin'將創建生產二進制文件,'make tests'將創建測試可執行文件,'make runtests'將運行測試等。儘管對於比玩具項目更大的任何項目,我都會建議尋找CMake。它比手動編輯Makefiles好多了:) – Ian

0

我只需添加一個主一個TEST.CPP文件,並在我的makefile創建test目標,這樣我既可以make - 打造我的生產代碼 - 或make test - 建立測試。在實際的項目中,我以非常相似的方式使用cmake(我有時將所有常見的依賴關係捆綁在一個core.a庫中,然後將main和test連接起來)。

相關問題