0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用在嵌入式开发中的单元测试框架

STM32嵌入式开发 来源:jera.com 2023-03-27 10:08 次阅读

介绍

单元测试框架在面向对象的编程世界中非常流行。JUnit(用于 Java)、SUnit(用于 Smalltalk)和 CppUnit(用于 C++)等框架提供了丰富的功能集。 但是,对于想要在更受限制的环境(例如用 C 编写的嵌入式系统)中进行单元测试的人来说,这组丰富的功能可能会令人生畏。 但是单元测试的重要之处在于测试,而不是框架。MinUnit 是一个 用 C 语言编写的极其简单的单元测试框架。它不使用内存分配,因此它几乎可以在任何情况下正常工作,包括 ROMable 代码。

源代码


 /* file: minunit.h */
 #define mu_assert(message, test) do { if (!(test)) return message; } while (0)
 #define mu_run_test(test) do { char *message = test(); tests_run++; 
                                if (message) return message; } while (0)
 extern int tests_run;
不,这不是一个错字。这只是 3 行代码(这里是 4 行,因为我换了很长的一行。)

设置测试用例

MinUnit 测试用例只是一个函数,如果测试通过则返回 0(null)。如果测试失败,该函数应该返回一个描述失败测试的字符串。 mu_assert 只是一个宏,如果传递给它的表达式为假,则返回一个字符串。mu_runtest 宏调用另一个测试用例并在该测试用例失败时返回。这里的所有都是它的!

例子

下面的示例运行两个测试,一个通过,一个失败。


 /* file minunit_example.c */
 
 #include 
 #include "minunit.h"
 
 int tests_run = 0;
 
 int foo = 7;
 int bar = 4;
 
 static char * test_foo() {
     mu_assert("error, foo != 7", foo == 7);
     return 0;
 }
 
 static char * test_bar() {
     mu_assert("error, bar != 5", bar == 5);
     return 0;
 }
 
 static char * all_tests() {
     mu_run_test(test_foo);
     mu_run_test(test_bar);
     return 0;
 }
 
 int main(int argc, char **argv) {
     char *result = all_tests();
     if (result != 0) {
         printf("%s
", result);
     }
     else {
         printf("ALL TESTS PASSED
");
     }
     printf("Tests run: %d
", tests_run);
 
     return result != 0;
 }

结论

人们认为编写单元测试框架必须很复杂。事实上,正如本技术说明所示,您只需几行代码即可编写一个。当然,如果您可以访问像 JUnit 这样的全功能测试框架,请务必使用它。 但如果你不这样做,你仍然可以使用像 MinUnit 这样的简单框架,或者在几个小时内创建你自己的框架。没有理由不进行单元测试。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3431

    浏览量

    128225
  • C语言
    +关注

    关注

    180

    文章

    7533

    浏览量

    128790
  • 字符串
    +关注

    关注

    1

    文章

    552

    浏览量

    20132
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • 单元测试
    +关注

    关注

    0

    文章

    33

    浏览量

    3063

原文标题:用在嵌入式开发中的单元测试框架

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单元测试/嵌入式软件系统测试技术专题培训

    从事软件开发测试教学、科研方面老师。五、培训大纲:嵌入式软件系统测试专题安排:(望来电来函咨询)单元测试专题安排:(望来电来函咨询)七、授
    发表于 05-29 13:31

    适合于嵌入式系统的C语言单元测试框架是什么

    工程没有合适的测试框架。本文发布一种简单的C语言测试框架CUNIT,可以应用于嵌入式领域。
    发表于 12-15 08:10

    如何搭建嵌入式C语言单元测试自动化框架

    关于嵌入式C语言单元测试自动化框架的搭建思路
    发表于 12-15 07:35

    Tessy嵌入式软件单元测试/ 集成测试工具的相关资料分享

    Tessy — 嵌入式软件单元测试/ 集成测试工具本文章向大家介绍Tessy — 嵌入式软件单元测试/ 集成
    发表于 12-21 07:11

    嵌入式需不需要单元测试

    前言嵌入式行业摸爬滚打这几年,遇见有规范单元测试的项目寥寥无几。归根到底,无非是公司希望快速迭代出产品,有问题等客户反馈再说。当然,也有人认为是嵌入式行业都是小而美的产品居多,没有到一定...
    发表于 12-21 08:16

    如何在.NET单元测试中使用嵌入式资源

    目录介绍背景使用代码下载源22.4 KB介绍有时,单元测试的逻辑要求使用嵌入到库的资源。最有可能的是,该文件保留了黑盒的初始数据,并已通过单元测试进行了
    发表于 12-21 07:31

    Java与'嵌入式' PostgreSQL数据库单元测试的相关资料分享

    在我们对数据库 DAO 类进行单元测试时,通常不应该依赖于一个外部数据库,所以会选用特定比较接近于真实数据库类型的内存或嵌入式数据库,如 HSQLDB(HyperSQL), H2, Derby 等
    发表于 12-21 07:56

    单元测试/集成测试自动化工具--WinAMS

    为单位的自动化单元测试工具作为能够检验出仅凭系统测试以及整体测试无法发现的[潜在错误]的检测方法,[单元测试]在嵌入式开发领域受到广泛重视。
    发表于 06-17 18:26

    如何提高嵌入式软件单元测试效率

    在本指南中,您将学习如何通过在更短的时间内运行更多的测试来增加您的单元测试吞吐量。 这种效率的提高来自于使用虚拟平台而不是物理硬件作为开发平台。 本指南对任何开发或运行
    发表于 08-28 06:31

    使用C++构建嵌入式开发框架

    使用C++构建嵌入式开发框架
    发表于 10-25 11:25 17次下载
    使用C++构建<b class='flag-5'>嵌入式开发</b><b class='flag-5'>框架</b>

    嵌入式需要单元测试吗?

    前言 嵌入式行业摸爬滚打这几年,遇见有规范单元测试的项目寥寥无几。归根到底,无非是公司希望快速迭代出产品,有问题等客户反馈再说。当然,也有人认为是嵌入式行业都是小而美的产品居多,没有到一定量级之前
    的头像 发表于 10-23 16:08 2063次阅读

    慕课嵌入式系统(第六章.单元测试5)

    慕课电子科技大学.嵌入式系统.第六章.嵌入式软件系统.单元测试50 目录6 嵌入式软件系统6.4 单元测试56.4.1课堂重点6.4.2
    发表于 10-20 19:21 4次下载
    慕课<b class='flag-5'>嵌入式</b>系统(第六章.<b class='flag-5'>单元测试</b>5)

    慕课嵌入式开发及应用(第二章.单元测试)

    慕课苏州大学.嵌入式开发及应用.第二章.入门与软件框架.单元测试0 目录2 入门与软件框架2.10 单元测试2.10.1 课堂重点2.10.
    发表于 11-02 19:21 15次下载
    慕课<b class='flag-5'>嵌入式开发</b>及应用(第二章.<b class='flag-5'>单元测试</b>)

    慕课嵌入式开发及应用(第一章.单元测试)

    慕课苏州大学.嵌入式开发及应用.第一章.基础与硬件.单元测试0 目录1 基础与硬件1.1 单元测试1.1.1课堂重点1.1.2测试与作业2 下一章0 目录1 基础与硬件1.1
    发表于 11-02 21:06 17次下载
    慕课<b class='flag-5'>嵌入式开发</b>及应用(第一章.<b class='flag-5'>单元测试</b>)

    慕课嵌入式开发及应用(第三章.单元测试)

    慕课苏州大学.嵌入式开发及应用.第三章.基本模块.单元测试0 目录3 基本模块3.11 单元测试3.11.1 课堂重点3.11.2 测试与作业4 下一章0 目录3 基本模块3.11
    发表于 11-03 12:36 12次下载
    慕课<b class='flag-5'>嵌入式开发</b>及应用(第三章.<b class='flag-5'>单元测试</b>)