gpt4 book ai didi

c - 对使用 RTOS 的项目进行单元测试

转载 作者:太空狗 更新时间:2023-10-29 15:05:40 26 4
gpt4 key购买 nike

对于我的下一个嵌入式系统项目,我想采用单元测试。它在技术上可能不是测试驱动的开发,但我至少想预先进行单元测试并进行全面的单元测试。

我正在使用 IAR EWARM 工具链。我正在考虑使用 cmocka、unity 或 cunit。我正在学习使用 µC/OS-III 作为 RTOS。

这里的问题是:单元测试如何与图片中的 RTOS 一起工作? E.G:我应该禁用内核并将代码作为单线程应用程序进行单元测试并 stub 所有/大多数内核调用,还是有更好的方法?

示例:在 µC/OS-III 中,入口点仍然是 main。从 main 调用任何初始化代码,然后调用 OSStart() 开始多任务处理。因此,当我运行测试工具时,我无法调用 OSStart()

#ifdef UNIT_TEST
test_runner();
#else
OSStart(&err);
#endif

然后在任务中的所有应用程序代码中,我只需要模拟消息传递并延迟对内核的调用。

这是最好的方法吗?或者我是否更适合启动内核,为我的测试运行器创建一个任务,并将所有任务作为单个线程运行,或者是否有其他一些好的方法涉及从测试工具中产生其他任务。

最佳答案

您似乎对单元测试有误解。您的代码是否使用 RTOS 并不重要,因为单元测试涉及单独测试代码模块,即 C 函数。 RTOS 在您的测试期间不会运行。

单元测试还假定您正在根据一组定义代码功能的要求进行测试。大多数单元测试的目标是能够提供各种形式的代码覆盖率。这包括语句、决策和多条件决策覆盖。

语句覆盖表明你已经运行了函数中的每一行代码。

决策覆盖涉及显示所有条件的两边(真/假)都被覆盖。

多条件决策覆盖 (MCDC) 用于测试复杂的决策,即 if (a && (b || c)) 并确保覆盖所有变化。 MCDC 测试通常仅限于非常关键的应用,例如航空电子设备,其故障可能会导致灾难性后果。

子例程通常被 stub ,即被拦截和控制,以证明每个子例程都按顺序调用并且传递的参数正确并且各种返回值正确运行。

我承认我对您提到的工具没有任何经验,但有许多可用的商业单元测试工具,Cantata、LDRA TestBench、IBM Rational Test Real Time 和其他适合深度单元测试的工具。

RTOS 本身也有商业解决方案。我的公司为 µC/OS-II 和 µC/OS-III 提供现成的单元和集成测试包。

斯科特验证软件

关于c - 对使用 RTOS 的项目进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com