关于单元测试(googletest)和项目/文件夹/文件的混淆

时间:2017-01-26 22:07:10

标签: c++ unit-testing ide qt-creator googletest

这是我第一次在我的c ++项目中使用单元测试。因此,我有许多现有的类,我将编写测试(至少对于其中一些)。此外,该应用程序当然具有main()功能。

我正在使用qt创建者和qmake,但也可以切换到cmake。该项目,qt creator和qmake运作良好。

我现在的困惑是如何添加单元测试?我打算使用googletest。我已经在一个新项目中运行测试,测试一些虚拟add(int, int)函数,所有内容都在一个文件中(函数,测试和主要)。它如何与现有项目(具有自己的main())一起工作。我是否需要设置第二个项目并在测试文件中包含标题?什么是好的文件夹结构?

1 个答案:

答案 0 :(得分:2)

在我看来,最好的方法是创建模型库(包含所有生产代码),程序可执行文件测试可执行文件。然后,您可以将所有生产代码链接到程序和测试可执行文件。测试文件也存储在测试可执行文件中。我的所有项目都有这种结构:

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

在文件系统的具体文件夹中可以存储test-和production-文件。构建工具(如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)

如果您使用像google test这样的测试框架,您还必须将modelTest可执行文件与gmock链接,并且不要忘记添加include文件夹:

e.g。

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)