问题标签 [check-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 - 基本单元测试和 C,我该如何开始?
在阅读了 StackOverflow 上的一些帖子后,我得出结论,我应该采用某种形式的测试驱动开发/单元测试(或至少探索该领域)。
由于我们在 Linux 下讨论 c 代码,所以我决定试一试(我不知道这是否是正确的选择,但如果它不好,我可以稍后再尝试其他方法)。
但是由于单元测试和单元测试框架的概念对我来说是全新的,我开始对一个非常小的测试代码进行一些单元测试(但无论如何我完全迷失了,感觉就像我错过了一些东西)。
这是我到目前为止所做的,我创建了以下文件:
- main.c,只调用一个名为 my_pow 的函数并打印结果的 main.c。
- my_pow.c,包含函数 my_pow。
- 我的_pow.h
- my_pow_test.c,我想我应该把 my_pow 函数的单元代码放在这里。
(所以“正常程序”是 main.c、my_pow.c 和 my_pow.h。)
这是 my_pow.c
然后我发现在 my_pow_test.c 我放了这样的东西:
这与检查手册第 3.1 章中的基本相同,但仍然不是......
有人可以把我推向正确的方向吗?
谢谢约翰
更新:我没有理由尝试使用 check 我只是认为我应该从某个地方开始,也许 CUnit 是一个更好的选择(我想我也会尝试一下,然后做出有根据的选择)。
更新:感谢@philippe 间接指出在线文档只是事实的一半,阐明文档所讨论内容的示例代码已与 check 包一起安装。在 Ubuntu 案例中 /usr/share/doc/check/example/tests/
更新:创建了代码示例,以便您从查看他的第一个版本开始,然后查看第二个版本等等。这样您就可以了解他如何创建一个非常基本的测试用例/代码,从零到有用的东西传统的 TTD 方式。
而且由于我的代码被破坏了,我希望单元测试来证明这一点,所以我作弊了一点,并针对真正的 pow 函数进行了测试。像这样的东西:
但是,将来我不会复制标准库中已有的内容:-)
有关的:
取自搜索[c] [unit-testing]
。
c - 用 Valgrind 运行单元测试是不是有点矫枉过正?
就在几天前,我开始研究一个名为 check 的单元测试框架,并打算在 Linux 下在 c 代码上运行测试。
现在检查一下,一些设计良好的代码和一些测试代码可以帮助我验证基本功能是否正确,我的意思是很容易查看变量并返回响应,然后确定函数是否正确。
但是,假设我想测试一个动态内存结构,其中包含大量的 malloc 和 free,结果我可以将数据放入并再次取出正确的数据。但这并不能证明我在这个过程中没有破坏一些内存,假设我忘记释放一半的内存并丢失了指针(经典的 memleak)。该代码可能会通过大部分单元测试。
所以现在的问题是:用 ie Valgrind 运行整个单元测试代码并让他检测任何 malloc/free 问题是个好主意吗?(或者也许编译成电子围栏之类的东西?)
感觉是个好主意,但我不确定我要在这里做什么......
谢谢约翰
更新:感谢道格拉斯和乔纳森,这似乎是个好主意,我应该继续这样做:-)
更新: Valgrind 是一个有趣的工具,但是我发现这样做的第一个 memleaks 是在测试框架中,而不是我自己的代码(虽然很有趣)。因此,对其余部分的提示是在颠倒您自己的代码之前验证您正在使用的单元测试框架没有泄漏。在我的案例中,只需要一个空的测试用例,从那时起,除了单元测试框架之外什么都没有运行。
c - 使用 check 在 C 中调试单元测试
我正在尝试为我的 C 应用程序使用检查 单元测试框架。但由于两点,我不能使用调试器(gdb):
首先,检查是否使用了一些复杂的宏(
START_TEST
和END_TEST
),调试器无法在我的代码中在这两个宏之间设置断点(事实上,我可以设置软件断点,但 gdb 从未见过)其次,检查通过重新定义中断行为来定义某种异常。因此,当我尝试设置硬件断点时,测试失败并退出,因为检查将硬件断点视为我的测试失败。
有没有人已经遇到过这个问题并有解决方案?
c - 用于 C 的 xUnit 测试框架
我正在为嵌入式设备开发一个相当简单的 C 项目。我想使用 xUnit 测试。我已经使用 Check 框架 ( http://check.sourceforge.net/ ),但它似乎不支持函数存根。我记得几年前使用过一个语法非常相似的框架,它支持存根,但我不记得它的名字了。
那么,任何人都可以推荐一个支持存根的 C 语言 xUnit 框架吗?在使用 Check 库时模拟存根的方法也可以。
c - Using files in Check test cases
I need to use a file for one of my tests written using Check. I initially hardcoded the path, which worked fine. However, this didn't work when the code is built outside of the source directory. I came up with the following solution which somewhat works. (I then prefix pathnames with TESTS_DIR
)
Unfortunately, this fails again for make distcheck
. I could post specific path layouts and structures, but I'm wondering if there's an "easy" way to refer to files in the source directory in all these cases. Thanks!
UPDATE: I've tried to use absolute paths, but it seems $abs_top_srcdir
isn't set when I tried to update the define in configure.ac
. Any thoughts as to why that is would be appreciated.
unit-testing - 在嵌入式设备中使用检查测试单元框架?
有没有人在需要交叉编译的嵌入式设备中使用 check 作为单元测试框架?
这甚至是一个好主意,还是我应该只使用其他东西(例如 embunit 或类似的东西)?
如果是这样,我应该如何编写 Makefile.ams 和 configure.ac?我一开始没有使用过自动工具,所以所有这些交叉编译的东西肯定无济于事......
我可以简单地跳过所有实际的配置检查,因为我只在一个或两个环境中编译,但我需要编译检查到目标吗?我无法从说明中了解如何将实际框架链接到我的测试代码。
我需要的最小文件是什么?这些示例完成了所有配置工作,但我不知道我可以遗漏什么。
c - 如何使用多个源文件和头文件编写检查测试 makefile.am?
如果我们在测试代码中有多个 *.c 文件,有人知道如何编写 Check makefile.am 吗?例子:
这是我的makefile.am:
我收到一个错误说:
它似乎无法链接编译代码。我是否错误地指定了 lib 类,或者我只需要一个类文件?
更新
通过编辑 makefile.am 来解决
至
c - 将检查单元测试框架与 C99 一起使用时出现语法错误
当我尝试使用带有标志的检查单元测试框架编译测试时,我遇到了一个奇怪的语法错误。-std=c99
所以,我正在尝试编译example.c
:
使用自动工具,具有Makefile.am
:
和configure.ac
:
但是我得到了这个奇怪的错误:
所以它发现了一个语法错误fail()
(我想 check 实现为一个宏)。如果我删除该-std=c99
标志,语法错误就会消失,并且可以正常工作。
有没有办法解决这个问题?我绝对希望编译器-std=c99
可以使用(和check.h
使用)可变参数宏。
c - 我应该对(C)单元的组合以及单元本身进行单元测试吗?
我是单元测试的新手,只是使用 Check for C 进入它。
这是单元测试理论的问题。假设(因为这是真的)我有一个代码模块,用于格式化与串行协议之间的消息。我有另一个模块,它实现了发送和接收这些消息的状态机。
我开始为消息发送和解析函数编写单元测试,并计划为状态机编写测试。在每种情况下,我都使用模拟/存根来伪造另一个模块(如果我在这里滥用任何单元测试流行语,请道歉)。
将两个模块一起测试是否也是一个好主意?所以我会用真正的协议引擎构建真正的状态机,用线级消息驱动它,看看是否有适当的状态转换和消息出来。
理论上,这已经被单独的测试覆盖了,虽然..
寻找一些普遍的线索,还没有足够的经验来感受一下。