嵌入式单元测试实践介绍 - 0

背景:      

       实践单元测试一段时间了,感觉十分有用,具体单元测试的好处,这边不描述,单元测试的基本概念,这里也不描述了。本文章是介绍单元测试在嵌入式开发的应用。

        我这边使用的单元测试框架是:Unity,一个轻量级的单元测试框架,C语言编写,方便移植和裁剪。

        Unity的相关资料源码可以从Github上下载,开源的。单元测试的优点也可以从CSDN其它博客中找到。

        本文会以TDD为指导原则,先写测试用例定义被测函数的功能,再在被测函数中实现这个功能,全部用C语言实现。

简介

代码架构介绍

        讲解下添加单元测试后的代码结构:

         1. 代码比较简单:

         2. 系统存在多个子系统或者模块的

 

单元测试的运行:

  1. IDE

  2. 目标硬件上运行

  3. Linux下运行

开始

        我eMMC协议的CMD6处理为例子,建立单元测试的相关测试用例,为什么要用CMD6处理函数为被测试对象呢,因为我正在写测试用例覆盖这个模块。.如果不了解eMMC协议的,没有关系,逻辑其实不复杂,下面会以简单的说明去介绍。

首个测试用例

根据协议描述,如果CMD6操作了EXTCSD192 - 255区域,device应该不做任何修改,并且设置“SWITCH_ERROR”状态。

The Index field can contain any value from 0–255, but only values 0–191 are valid values. If the Index value is in 192-255 range the Device does not perform any modification and the SWITCH_ERROR status bit is set.

 测试用例简介,

         CMD6操作偏移设置为192进行访问,argument是CMD6的参数,4BYTE,每个byte代表不同的含义,其中[16:23]指存取的index。

         其中emmc_initial_status()为初始化device status为正常,emmc_get_status()是获取device当前的状态。

static void tst_cmd6_access_invalid_index(void)
{
       BYTE ret;
       BYTE command_set = 0;
       BYTE value = 0;
       BYTE index = 0;
       BYTE access_mode = 0;
       UINT argument;
       EXT_CSD extcsd;
       
       emmc_initial_status();                // 初始化device status为normal status

       index = 192;
       argument = ((UINT)access_mode << 24) | ((UINT)index << 16) | ((UINT)value  << 8) | command_set;

       ret = emmc_cmd6(argument, &extcsd);

       TEST_ASSERT_EQUAL_INT8(FALSE, ret);    // 被测函数检测到异常,返回false
       TEST_ASSERT_EQUAL_INT8(SWITCH_ERROR, emmc_get_status());
}

 被测函数如下:

BYTE emmc_cmd6(UINT argument, EXT_CSD *pextcsd)
{
    return TRUE;       
}

把测试用例添加到测试套件中:

int tstSuite_cmd6(void)
{
       UNIT_regSetupFunc(Setup);
       UNIT_regTeardownFunc(TearDown);
       UnityBegin(__FILE__);

       RUN_TEST(tst_cmd6_access_invalid_index);

       UNIT_regSetupFunc(NULL);
       UNIT_regTeardownFunc(NULL);
       return UnityEnd();
}

运行测试,并且输出结果:

>>>>
..\unittest\ts_cmd6\tsuite_cmd6.c:87:tst_cmd6_access_invalid_index:FAIL: Expected 0 Was 1


-----------------------
1 Tests 1 Failures 0 Ignored
FAIL

OK,结果肯定是fail的。我们修改被测代码以让测试可以pass,修改内容:在检测到异常时返回FALSE,并且在index >= 192时设置device status为SWITCH_ERROR”,修改过程略...修改后如下

BYTE emmc_cmd6(UINT argument, EXT_CSD *pextcsd)
{
       BYTE index = (BYTE)(argument >> 16);

       if (index >= 192)
       {
              emmc_set_status(SWITCH_ERROR);
              return FALSE;
       }

       return TRUE;
}

测试通过,输出界面如下:

>>>>
..\..\..\unitTest\ts_cmd6\tSuite_cmd6.c:126:tst_cmd6_access_invalid_index:PASS


-----------------------
1 Tests 0 Failures 0 Ignored
OK

总结:

1. 今天简单介绍了单元测试,实现了一个测试用例,并且让测试通过。下次我们再介绍更多的应用。3Q!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 嵌入式Qt开发项目教程目录通常包括以下几个主要部分: 1. 嵌入式Qt开发入门:介绍嵌入式Qt开发的基础知识和环境准备,包括Qt的安装和配置,嵌入式开发板的选择和搭建等。 2. Qt编程基础:介绍Qt的基本编程概念和常用类库,包括信号与槽机制、界面设计、布局管理器、事件处理等内容。 3. Qt多媒体应用开发:介绍如何使用Qt开发多媒体应用,包括音频播放、视频播放、图像处理等相关内容。 4. Qt网络应用开发:介绍如何使用Qt进行网络通信,包括TCP/IP通信、UDP通信、HTTP通信等相关内容。 5. Qt数据存储和数据库:介绍如何使用Qt进行数据存储和数据库操作,包括文件读写、XML处理、SQLite数据库等相关内容。 6. 嵌入式Qt界面开发:介绍如何使用Qt进行界面开发,包括窗口管理、界面布局、控件使用、多语言支持等相关内容。 7. Qt图形应用开发:介绍如何使用Qt进行图形应用开发,包括图形绘制、图像处理、动画效果等相关内容。 8. 嵌入式Qt性能优化:介绍如何对嵌入式Qt应用进行性能优化,包括代码优化、内存管理、资源优化等相关内容。 9. 嵌入式Qt应用部署:介绍如何将嵌入式Qt应用部署到目标设备上,包括交叉编译、打包发布、调试技巧等相关内容。 总的来说,嵌入式Qt开发项目教程目录应该涵盖了从入门到实践的全面内容,帮助读者掌握嵌入式Qt开发的基本知识和技能,并能够独立完成嵌入式Qt应用的开发和部署。 ### 回答2: 嵌入式Qt开发项目教程目录如下: 第一章:嵌入式Qt开发介绍 - 介绍嵌入式Qt开发的概念和应用场景。 - 介绍Qt平台及其特点。 第二章:环境搭建 - 介绍嵌入式开发平台,如Linux或RTOS。 - 介绍Qt开发环境的安装和配置。 - 介绍交叉编译工具链的搭建。 第三章:Qt基础知识 - 介绍Qt的基本概念,如信号和槽机制、对象树等。 - 介绍Qt常用的核心类,如QWidget、QLabel、QPushButton等。 - 讲解Qt的布局管理器和UI设计工具。 第四章:嵌入式Qt应用开发 - 介绍Qt的事件处理和多线程编程。 - 讲解Qt的网络通信和数据库访问。 - 介绍Qt图形和动画的应用。 第五章:嵌入式Qt与硬件交互 - 介绍如何使用Qt与硬件进行交互,如GPIO、串口、I2C等。 - 讲解Qt的音频和视频处理能力。 第六章:嵌入式Qt应用优化和调试 - 介绍Qt应用的性能优化技巧。 - 讲解如何使用Qt Creator进行调试和单元测试。 - 介绍Qt的错误处理和日志记录。 第七章:嵌入式Qt应用部署与发布 - 介绍Qt应用的打包和部署策略。 - 讲解如何进行Qt应用的远程调试和更新。 第八章:案例分析与实践 - 通过实际的嵌入式Qt开发案例,加深对前述知识点的理解。 - 讨论如何解决实际项目中遇到的问题。 此目录提供了一条完整的嵌入式Qt开发学习路径,从环境搭建到高级应用优化,逐步引导读者了解嵌入式Qt开发的各个方面,并附带示例代码和实践案例,帮助读者更好地理解和掌握该领域的知识与技能。 ### 回答3: 嵌入式Qt开发项目教程目录可以大致分为以下几个部分: 1. Qt简介: - Qt介绍 - Qt的优点和特点 - Qt的应用领域 - Qt的版本和许可 2. 嵌入式Qt开发环境设置: - 操作系统的选择和配置 - Qt SDK的安装 - Qt Creator的配置 - SDK的交叉编译配置 - Qt交叉编译工具链的配置 3. 基本Qt开发知识: - Qt的核心概念和类库 - Qt的信号与槽机制 - Qt的事件处理 - Qt的界面设计和布局 4. 嵌入式应用程序架构设计: - 嵌入式应用程序的特点和要求 - 设计模式在嵌入式Qt开发中的应用 - MVC模式和Qt的数据模型 - 多线程编程 5. 嵌入式Qt开发工具的使用: - Qt Creator的使用技巧 - 调试嵌入式Qt应用程序 - 嵌入式Qt应用程序的性能优化 - Qt的国际化和本地化支持 6. 嵌入式Qt常用模块的使用: - Qt网络编程 - Qt数据库编程 - Qt图形编程 - Qt多媒体编程 - Qt传感器编程 - Qt系统操作和硬件控制 7. Qt在嵌入式系统中的应用案例: - 嵌入式Qt应用的开发流程 - 嵌入式Qt应用的实际项目案例 - Qt在物联网和智能家居中的应用 通过以上这些章节和具体内容,可以帮助初学者系统地了解嵌入式Qt开发的基本知识和技能,并能够应用于实际项目中。当然,根据实际情况,可以根据项目需求进行适当的调整和补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值