问题标签 [unity-test-framework]
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.
c - 在较大函数的“提取方法”重构后测试静态函数
我有一个很大的功能,如下所示:
我已经重构了代码,提取了一个方法,如下:
现在,我想对这个功能进行单元测试。
我可以很容易地测试processMsg
,因为它是从 公开可用的.h
,并且我已经完成了必要的测试来检查结构初始化和解析是否正确。
问题在于测试processMsgRegister
内部功能。我想单独测试它,而不必每次都测试所有processMsg
外部函数,因为我必须将测试与所有 msg 处理回调、期望等混为一谈,因为它已经被自己测试过了。
经过一些评论,我认为最好的方法是将这些方法移动到一个新的class
,使它们public
在那里,但不发布该类,因此它可以独立于其他方法进行测试。
所以我现在的问题是:
- 如何在 中实施这种方法
plain C
?
从代码组织的角度(分割成多个文件等)和有用的编译器/链接器标志的角度来看,这个问题都是。
我的设置:gcc、cmake、unity、cmock
c - 统一测试时忽略用户输入
我有一个聊天机器人程序,它使用一个调用函数userInput()
来获取用户的输入。
我必须为我的项目测试程序,但我不知道如何在测试程序的函数中输入文本。我尝试过的一切都停止了等待用户输入内容的自动测试。
在不停止测试程序的情况下添加用户会说的测试短语的任何帮助。
c - 如何在 C 项目中包含 ThrowTheSwitch/Unity?
我想在几个项目中使用 ThrowTheSwitch Unity 进行单元测试,所以我有这个通用结构:
为了包括统一,我可以使用不同的方法:
- Git 子模块
- 优点:仅 git,一个单一的事实来源
- 缺点:获取所有统一存储库,而只需要 3 个文件
- 具有稀疏结帐的 Git 子模块
- 优点:只得到我需要的
- 缺点:需要一些技巧来启用稀疏结帐
- Git 子树
- 优点:如果没有可用的互联网是安全的
- 缺点:在历史上保留统一的本地副本
- 从发布中获取 Wget
- 优点:非常简单,非常有效
- 缺点:依赖
wget
和tar
互联网(没有本地缓存)
- unity的本地副本
- 优点:最简单的解决方案,有效
- 缺点:不是 SSOT,所有类似的项目都会有他们的本地统一副本,不知道同步了哪个统一版本。
以上方法似乎都不是完美的,我不知道该选择哪一种。最好的解决方案是拥有一个简单的包管理器,其中包含一个package.json
列出我的依赖项及其版本的文件。
还有其他/更好的解决方案吗?
c - 使用统一测试时,链表插入函数返回错误
我正在用 c 编写一个简单的双向链表实现,我创建了如下结构。
我正在使用此功能在我的链接列表中插入元素,一切似乎都正常。假设我用整数填充我的列表,调用函数 4 次以插入 {2,4,6,8}。当我执行打印功能时,它正确返回 2、4、6、8。
当我尝试统一测试我的功能时,问题就出现了,我编写了这个简单的单元测试:
当我执行单元测试时,我得到这个输出:
此时问题似乎与'get_node_i'函数有关,该函数用于检索列表第i个位置的元素......这是函数:
我试图在单元测试中执行我的打印功能,我发现它只正确打印前两个节点(2,4),而对于其他节点,它打印指针......这对我来说很奇怪,好像我尝试在我的代码的任何其他部分执行打印功能,它会正确返回列表..
这是我创建列表和节点的方式
这是 list_test 函数和 print 函数,
如果还有什么需要澄清的,请告诉我,谢谢。
c - "make: *** No rule to make target" 使用 Unity 单元测试
我最终安装了 ceedling,它使用 ruby 代码自动生成测试运行。学习imo更好的工具集。我将保留这个问题,以防其他人有同样的问题并且其他人有答案。
嗨 StackOverflow 家族,
我目前正在阅读“嵌入式 C 的测试驱动开发”,并试图让 Unity(单元测试器)工作。我可以使用 gcc编译一些示例代码。
当我尝试按照制作教程并在命令行中运行“make”时:
我尝试遵循throwtheswitch 中的树轮廓,我的个人树如下(为清楚起见,删除了 Unity 的文件):
我的makefile看起来像这样(记住,它是复制的):
运行make -d test
(删除文本以适应正文,但浓缩为重要部分):
c - Unity 的链接器错误(C 单元测试框架)
我在 Stackoverflow 中乱扔垃圾,试图将 Unity 单元测试框架 ( https://www.throwtheswitch.org/unity ) 链接并构建在 CMAKE 上,以便我可以编写单元测试,但我一直遇到同样的错误:
我在这里记录了我的最后一次尝试https://github.com/aamarin/computer_systems/tree/dev最新的提交是不稳定的提交。我不确定在 computer_systems/tests/CMakeLists.txt 中还缺少什么来使其正常工作。只是寻找一些指导,也许我可能会从这里缺少解释https://gitlab.com/CLIUtils/modern-cmake/-/blob/master/examples/extended-project/src/CMakeLists.txt。关于更好地构建我的文件夹结构的指导也很有帮助。
embedded - 执行 pow(2, ((m - 69.0f) / 12.0f)) 时出现 DeepSleepLock 下溢错误 - MBed OS
我在 NUCLEO_L432KC 和 MBed CLI 上使用 MBed OS 来编译、刷写和测试。使用 OpenOCD 和 gdb 进行调试。MBed 有自己的 GreenTea 测试自动化工具,用于在嵌入式硬件上进行单元测试,它使用 utest 和 Unity 测试框架。
当我使用 GreenTea 对这个函数进行单元测试时:
我收到 DeepSleepLock 下溢错误:
[1589410046.26][CONN][RXD] ++ MbedOS 错误信息 ++ [1589410046.30][CONN][RXD] 错误状态:0x80040124 代码:292 模块:4 [1589410046.35][CONN][RXD] 错误消息:DeepSleepLock 下溢( < 0) [1589410046.37][CONN][RXD] 位置:0x8003B09 [1589410046.40][CONN][RXD] 文件:mbed_power_mgmt.c+197 [1589410046.43][CONN][RXD] 错误值:0xFFFF [1589410046.53][CONN] [RXD] 当前线程:主 Id:0x20001200 条目:0x80044A7 StackSize:0x1000 StackMem:0x20001C18 SP:0x2000FF04 [1589410046.62][CONN][RXD] 更多信息,请访问: https ://mbed.com/s/error?error =0x80040124&tgt=NUCLEO_L432KC [1589410046.64][CONN][RXD] – MbedOS 错误信息 –</p>
然而,当我将功能更改为此:
它可以正常工作并且测试良好。
MBed在这里有一个错误状态解码器,上面写着
使用报告的“位置”来找出导致错误的位置的地址,或者尝试构建一个启用了 MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 配置的非发布版本,以捕获此错误源自的文件名和行号。
当我启用 MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 时,它说位置在 mbed_power_mgmt.c 第 197 行,这是函数:
任何想法为什么会发生这种情况或如何进一步排除故障?
c - 将 C 状态机代码与单元测试和 doxygen/graphwiz 图同步
我正在写医疗软件。为此,我提出了一个工作流程,让我可以向编程知识有限的人展示我制作的程序与我应该制作的程序相同。工作流程如下:
制作一个人类可读的文档,说明程序必须做什么,不能做什么。
将该文档转换为状态机图。
编写证明是编写的单元测试 C 代码实现步骤 2 中的图表
编写通过第 3 步中的单元测试的代码。
步骤 1 和 2 不能自动化。我正在寻找一种方法来自动化步骤 3 和 4。基本上我需要一些程序来保持以下语句同步:
状态机图:
单元测试:
代码:
头文件:
我正在使用 C 测试框架“unity”:https ://www.throwtheswitch.org/unity
我一直在寻找状态机生成器/编译器。我找到了 SMC:状态机编译器,但据我所知,它不能做我想做的事情: http ://smc.sourceforge.net
有人知道可以做到这一点的软件吗?
干杯,塞德里克
c++ - unity C unittest 框架可以用来对 C++ 代码进行单元测试吗?
我正在使用统一框架在 AtMega32A 上对我的 C 代码进行单元测试。这很好用。现在我想知道我是否可以以某种方式欺骗统一来测试我的 C++ 代码。
我制作了一个小的概念证明程序,它通过一个公共函数公开了 C++ 类的所有成员。现在我想在该公共函数中放置一些断言宏。该程序可以在这里找到: https ://github.com/cdwijs/cpp_unit_test
在我的主要我有以下几点:
在 Private_test.cpp 我有以下内容:
我不知道如何运行测试功能。有任何想法吗?我是在寻找正确的方向,还是应该使用专门针对 C++ 的测试框架?