2017-01-26 54 views
1

這是我第一次在我的C++項目中使用單元測試。因此,我有許多現有的類,我將編寫測試(至少對其中的一些)。此外,該應用當然具有main()功能。關於單元測試(googletest)和項目/文件夾/文件的困惑

我正在用qmake創建qt,但也可以切換到cmake。該項目,qt創建者和qmake正在很好地工作。

我現在的困惑是如何添加單元測試?我打算使用googletest。我已經在一個新項目中運行了一個測試,測試了一些虛擬的add(int, int)函數,其中一切都在一個文件中(函數,測試和主函數)。這是如何與現有的項目(它有自己的main())一起工作。我是否需要安裝第二個項目並在測試文件中包含標題?什麼是一個好的文件夾結構?

+1

一個簡單的方法是創建一個lib,你的應用程序將「只」具有'main',它會正常調用lib的類/函數。然後你的測試應用程序也可以鏈接到你的lib並測試它的組件。 (總共3個項目:MyLib,MyApp,MyTest)。 – Jarod42

+1

如果您的測試是在第二個項目中,這絕對是最好的。 [這個項目](https://github.com/nholthaus/units)(我是作者)已經通過CMake加入了gtest,你可以從字面上複製/粘貼CMake文件起飛,然後看到文件夾結構的例子。 –

回答

2

在我看來,最好的方法是創建一個模型庫(所有的生產代碼),一個可執行程序測試可執行。然後,您可以將所有生產代碼與程序和測試可執行文件鏈接起來。測試文件也存儲在測試可執行文件中。我所有的項目都有這樣的結構:

model.lib (link against both exe) 
program.exe 
modelTest.exe 

在文件系統的具體文件夾中可以存儲測試文件和生產文件。構建工具(如cmake)應將文件分開,並將測試文件放入測試可執行文件和生產文件到模型庫中。

請看下面的例子: 我有以下文件的文件夾:

src (folder) 
- main.cpp 
- model.h 
- model.cpp 
- modelTest.cpp 

一個cmake的文件看起來是這樣的:

cmake_minimum_required(VERSION 2.8) 
project(TheUltimateProject) 
ADD_EXECUTABLE(program main.cpp) 
ADD_library(model shared model.cpp model.h) 
ADD_EXECUTABLE(modelTest modelTest.cpp) 

target_link_libraries(program model) 
target_link_libraries(modelTest model) 

如果你使用像谷歌測試框架測試,您還必須將modelTest可執行文件鏈接到gmock,並且不要忘記添加包含文件夾:

eg

link_directories($ENV{GMOCK_HOME}/Debug) 
include_directories($ENV{GMOCK_HOME}/googlemock/include) 
include_directories($ENV{GMOCK_HOME}/googletest/include) 
target_link_libraries(modelTest gmock_main gmock)