问题标签 [cpputest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1030 浏览

c++ - Valgrind 和 QEMU - 无法检测到内存泄漏

我想用 Valgrind (memcheck) x86 测试我的 C++ 代码是否存在内存泄漏。

但该软件经过交叉编译并在 ARM 上运行。

为了进行一些自动化测试,我决定通过 QEMU 模拟我的 ARM 硬件。

而且我还决定使用cpputest 单元测试 ARM 二进制文件来确保确定性行为并在单元测试涵盖的范围内搜索内存泄漏。

总而言之,我有一个 ARM 二进制文件,应该通过 QEMU 用户模式进行模拟。

我的电话看起来像这样:

我的 C++ 代码看起来像这样。它有 20 字节的内存泄漏,并且在与 QEMU 一起使用时, valgrind 调用没有发现此泄漏。 在我插入内存分配并且没有释放机制后,我预计会发生内存泄漏

Valgrind 输出:

当我在 ARM 硬件上运行这个程序时,valgrind-arm 会使用完全相同的二进制文件找到泄漏。

你们有谁知道为什么 Valgrind 没有发现与 QEMU 用户模式相结合的内存泄漏?

提前致谢

0 投票
0 回答
313 浏览

c++ - 将 CppUTest 连接到 C 接口

我正在使用 CppUTest 处理我的 C 库的单元测试。但是,我在编译测试文件时遇到了问题。

这是我的MakefileCPPUTEST_HOMEvar 是一个环境变量):

当我运行make时,会给出以下输出:

对我来说,这似乎是一个链接问题。但是,根据手册,我认为我没有做错任何事情:

commonTest.c

commonTest.cpp

最后,我的目录结构:

在某些情况下,我不是 C++ 程序员,也没有使用 CppUTest 的经验,所以请耐心等待。

感谢您的任何帮助,并随时提出问题。

0 投票
1 回答
186 浏览

c++ - 使用 CppUTest 问题进行 Yaml-cpp 配置解析器测试“在 '(' 标记之前的预期类型说明符”

我正在使用 yaml-cpp 库(v 0.6.0)来解析 yaml 配置文件。Yaml-cpp 作为系统库安装。

我创建了一个类Parser来检查 yaml 节点中的键值对。该类Parser被构建为ConfigParserLibrary静态库。

现在我想Parser使用CppUTest. 使用CMake. 示例代码:

CMakeLists:

当我在另一个可执行文件中使用 Parser 类时,它正在编译而没有错误。但是当我在 ConfigParserTests.cpp 文件中包含 config_parser_lib/Parser.hpp 文件时,它会引发:/usr/include/c++/8/optional:208: error: expected type-specifier before ‘(’ token ::new ((void *) std::__addressof(this->_M_payload)) ^. 在此处输入图像描述 解析器.hpp

解析器.cpp

ConfigParserTests.cpp

运行测试.cpp

CMakeLists.txt:当我将CMAKE_CXX_STANDARD17 更改为 11 时,我收到以下错误/usr/include/c++/8/bits/stl_tree.h:636: error: ‘__node’ does not name a type ::new(__node) _Rb_tree_node<_Val>; ^~~~~~

如果我注释掉 中的#include "config_parser_lib/Parser.hpp"ConfigParserTests.cpp,则没有错误。因此,我认为错误来自包含<yaml-cpp/yaml.h>文件。如果我包含<yaml-cpp/node/node.h>而不是yaml.h>,则没有错误,但我需要<yaml-cpp/yaml.h>包含我需要使用的其他头文件的文件。

gcc 版本 8.3.1 20190226。

0 投票
0 回答
57 浏览

eclipse - 在 Eclipse 中设置单元测试 arduino 代码

在退休之前,我根据 James W. Grenning 所著的 Test-Driven Development for Embedded C 一书成功地向我的团队介绍了 Eclipse 中针对嵌入式 arm 交叉编译目标的单元测试

现在我想为我自己的 Arduino 项目做同样的事情,但我遇到了一些障碍

我有 Eclipse Arduino 插件在一个示例项目(目标项目)上工作 - 要单元测试的函数和类位于该项目的单独文件夹中(称为“应用程序”)

我在一个单独的测试项目中安装了 CppUTest 单元测试库我在这个测试项目中包含了来自目标项目的“应用程序”文件夹

现在,这个测试项目不能立即解析目标文件中的包含文件,如果我手动将这个头文件包含到测试项目中,它会引用其他包含文件,我开始消失在一个兔子洞里试图满足其他头文件参考

我最初通过从目标函数和类中删除来解决这个问题,到目前为止,唯一需要的更改是将 Arduino 类型定义(如“字节”)更改为标准 C“无符号字符”——然后这些在两个项目中都可以很好地复制广告测试运行并通过

但我不是特别喜欢必须更改类型定义,并且希望能够包含,并保持代码在通常的 Arduino '风格'

所以,问题是 - 有没有更好的方法来做到这一点?

我确实认为我应该能够将 CppUTest 库添加到 Arduino Eclipse 项目中,作为测试项目,但似乎没有像使用 ac/ 那样添加库和包含 Arduino 项目路径的选项c++ 项目,我没有看到将所有必要的 Arduino 头文件添加到标准 C++ 项目的简单方法,特别是因为我相信某些头文件依赖于所选的 Arduino 平台,当然不支持一个标准的 C++ 项目

有一个通用的解决方案会很好,这样我就可以使用不同的单元测试框架创建其他测试项目,因为我以前的同事已经转向 Cxx 单元测试框架,还有其他的(比如谷歌)我想要尝试

期待您的建议

0 投票
1 回答
611 浏览

cmake - 使用 mingw-w64 编译 cpputest

我正在尝试使用 mingw-w64 编译 cpputest,但无法使其工作,而且我找不到任何有关如何做到这一点的资源。所以希望这个问题将来能帮助其他人。

我想用mingw-w64编译cpputest,最好不安装MSYS2或其他包。

我安装了 mingw-w64 i686-8.1.0-posix-dwarf-rt_v6-rev0。我从这里克隆了 cpputest 。

我尝试使用 Mingw-w64 编译 Google 测试并通过调用 CMake在 MSYS2/MinGW32 下编译和使用 CppUTest 3.8 :

产生:

运行 make 失败:

我尝试了将 cstddef 添加到 SimpleString.h 的明显解决方案:

但这仍然失败并出现同样的错误。

因此,我尝试通过安装 MSYS2,然后安装 mingw-w64、CMake 和 Ninja 来跟踪CMake 和 MSYS2 mingw-w64 的构建错误。这给出了:

编译cmake -G Ninja . && ninja失败:

谢谢!!

0 投票
1 回答
348 浏览

makefile - 在项目的makefile中包含cpputest

我想将cpputest作为 git 子模块包含在我的项目的源代码树中,但我对 autotools 并不十分熟悉。

我一直在看这个页面作为指南

我创建了以下 Makefile,cpputest 位于它下面的子目录中:

运行这个 makefile 可以满足我的要求,但我不确定依赖项有多强大。除了干净的规则之外,还有什么我应该考虑添加的吗?


这是John Bollinger 回答后我的最终 Makefile 。

它位于 CppUTest 目录的根目录中。

0 投票
1 回答
704 浏览

c++ - 如何在 CppUTest 中使用 MockSupportPlugin 自动执行 checkExpectations?

CppUTest 文档说

MockSupportPlugin 使使用模拟的工作更容易。它会自动为您完成以下工作:

  • 每次测试结束时的 checkExpectations(在全局范围内,在所有范围内递归)
  • 在每次测试结束时清除所有期望
  • 安装在每次测试开始时在插件中配置的所有比较器
  • 在每次测试结束时删除所有比较器

参考:https ://cpputest.github.io/plugin_manual.html

我尝试了以下示例:

加上我添加的 MYDummyComparator:

但是当我从测试中删除 expectOneCall() 或 expectNCalls() 时,它显示测试失败。如何使用 CPPUTest 中的 MockSupportPlugin 自动实现“在每次测试结束时进行 checkExpectations(在全局范围内,在所有范围内递归)”?

0 投票
0 回答
557 浏览

stm32 - 错误:寄存器“sp”不适用于此目标上的全局寄存器变量

我正在玩一个 STM32 µC 的项目。我在 Mac OSX 系统上使用SW4STM32工作台和 CubeMX。我的项目本身很好,一切都相应地编译并在设备上按预期运行。

为了进一步学习,我想使用CppuUTest框架来实现单元测试。我已经设置了一切,得到了我的测试目录和一个 makefile 来配置 MakefileWorker 变量。

但是,在执行 Makefile 时,我不断收到错误消息:

此错误源自文件 syscalls.c(由 CubeMX 生成的文件)。导致错误的行是:

经过我的研究,似乎没有简单的解决方法来解决这个问题。源代码由 Cube 生成,在使用 sw4stm32 工具链(使用 mcu gcc 编译器)编译时可以正常工作。但是,CppUTest 工具链正在使用 clang,它无法处理全局寄存器变量(正如错误所说)。

我的问题是:

你们中的任何人在为 OSx 系统上的 sw4stm32 项目设置 CppUTest 时是否有同样的错误或更多经验?有谁知道如何解决这个问题?

如果您需要我的更多信息/代码片段,我很乐意分享。

非常感谢你们!任何帮助将不胜感激:-)

干杯,托比

0 投票
0 回答
267 浏览

c++ - CppUTest 覆盖头文件

我正在学习单元测试。我可以用 Eclipse 和 CppUTEST 编译简单的程序。有用。但是,我无法理解如何覆盖/存根头文件。我想出了一个测试场景,

我的文件:

理论上,在文件“src.h”中存储了本机编译器(stm-gcc)的设置。我的测试编译器(gcc)不能使用这些依赖项,所以我应该覆盖/存根这个头文件。这就是我创建 /mocks/fsrc.h 文件的原因。fsrc.h 应该覆盖/存根 src.h 文件。

示例文件代码:

所有测试:

test_src.cpp

模拟/fsrc.h

模拟/fsrc.c

src/src.h

src/src.c

Eclipse 错误:

'g++ -I"C:\cygwin64\home\karb\cpputest\include" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"AllTests.d" -MT"AllTests.o" -o "AllTests.o" "../AllTests.cpp" ../AllTests.cpp:5:10:致命错误:src/src.h:没有这样的文件或目录'

当我改变时:

编译工作,但覆盖头文件不起作用。我做错了什么,我无法覆盖主头文件?

0 投票
0 回答
67 浏览

eclipse - Eclipse 中使用的单元测试插件(C/C++ 单元)的失败指示错误

使用 C/C++Unit(Cpputest 插件) 和 eclipse 平台进行单元测试时,测试用例中的红条显示错误和失败指示。我已经从链接下载了 CppuTest 包;“https://github.com/cpputest/cpputest”并且我已经在 eclipse 4.16 中设置了它,以便使用 cygwin 在 eclipse 平台中进行单元测试。

当我开始为我们的项目集成单元测试时,我注意到只有通过的测试用例列在测试运行下,并且红色条也没有显示表示某些测试用例失败。

有 18 个测试用例,但在测试运行下只列出了 15 个。显然,既没有指示故障,也没有显示红条。