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

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

这是我第一次想在我的 C++ 项目中使用单元测试。因此,我有许多现有的类,我将为它们编写测试(至少是其中的一些类)。此外,应用程序当然有一个 main() 函数。

我正在使用 qt Creator 和 qmake,但也可以切换到 cmake。该项目、qt Creator 和 qmake 运行良好。

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

最佳答案

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

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)

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

例如

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)

关于c++ - 关于单元测试(googletest)和项目/文件夹/文件的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41883841/

相关文章:

asp.net - 从代码隐藏页面按 F7 时,如何使 Visual Studio 始终显示源 View 而不是设计 View ?

vim - 作为图形 IDE 用户,我应该对传统编辑器感兴趣吗?

c++ - std::vector<T> 和基本的多线程设计模式

c++ - 计算表中值的数量 C++

Python 单元测试所有测试用例

c# - 模拟 System.Net.FtpClient GetHash 方法

php - 我们可以配置 PHPStorm 不识别 mssql 库吗

c++ - 如何在 MacOS X Sierra 上安装 Qt 并在终端上添加 qmake

PHP 析构函数和与 C++ 析构函数的关系?

javascript - 如何将Sinon.js FakeXMLHttpRequest与superagent一起使用?