Keil μVision 5.30 CppUTest测试框架模拟器Simulator测试(1)-测试库工程创建

项目背景

当前公司所做的主要是使用32位单片机以及8位单片机开发灯控类产品。近期因为项目比较多,遇到了许多因为代码BUG导致的售后问题。有些可以通过OTA升级,而有些会导致频繁重启的问题则无法通过OTA升级解决。

反思问题出现的原因,代码的编写是一方面的原因,但是程序员写代码一定是有BUG的,缺失的只是对代码全面系统的测试过程,导致一些数组溢出之类的纯软件问题出现。

事实上软件测试在软件工程中已经是很成熟的,但是在据我个人所了解的以及在网上查找到的信息了解到的,在单片机编程领域使用系统化测试框架以及方法的资料是相当少。能找到的一本是《测试驱动的嵌入式软件开发》。这里面介绍的就是使用的是Unity和CppUTest两种测试框架。

在此前的项目中实践过双目标的测试方法,具体如下:

  1. 业务代码在Keil5中编译及运行
  2. 测试代码和工程在VisualStudio中编译及运行

这样是因为CppUTest提供了在VS中可以直接运行的工程,只需要把测试的代码添加进去就可以直接运行。但是在实践中发现有关于数据类型的测试曾有在VS中跟在Keil中实际执行起来不同的问题。这样的问题比较常见,毕竟是用两个不同的编译器。

所以当前的项目就是想要在完全使用Keil完成业务代码的开发以及测试的运行。而因为每次编译下载到Flash中需要浪费很多的时间,因此采用在keil中使用Simulator仿真运行测试的方式。

最终的效果如下,直接在Keil的Debug Viewer中输出测试的结果。

image

项目目标

这边文章主要实现以下目标:

  1. 创建两个工程,项目A用来编译并生成CppUTest的库,一个是实际项目B。在B项目中不直接使用CppUTest源代码而使用编译好的库的好处是节省编译的时间,且B项目中可以使用与A项目中不同版本的编译器(未经验证,我这里用的是同一个版本的编译器)。
  2. 实际项目B使用Keil提供的Simulator运行,不需要依赖于实际的硬件,故省去了Flash下载及受到硬件影响的麻烦。且可以在硬件准备好之前就可以开始开发硬件无关的软件代码。

实际步骤

下载CppUTest源码

CPPUTest官网->Download Release 3.8 as .zip
当然版本可能会更新,具体以官网为准。

Keil中创建CppUTest测试工程

  • 创建新工程,起名CppUTestLib
  • 选择器件,这里跟你B项目的硬件平台一致,此处因为我用的是M4F核心的MCU,则选择则如图所示
    image
  • 管理运行时,这里都不需要勾选
    image
  • 新建的项目如图所示
    image
  • 添加CppUTest源代码
    • 在项目管理的Target上点击右键,选择[Manage Project Items]来添加文件。
    • 点击下图位置创建两个Groups
      image
    • 定位到CppUTest解压之后的目录,进入src文件夹,将CppUTest/CppUTestExt下的所有源代码添加到项目中,注意添加项目的时候筛选器默认筛选的是.c文件,而CppUTest是C++文件,要更改筛选器为[C++ Source file*.cpp].
      image
  • 添加CppUTest引用路径

    Options for Target->C/C++(AC6)->IncludePaths->Folder Setup
    添加
    cpputest-3.8->include

image
image

  • 更改项目配置
Output->Name of Excutable->cppUTest
选择:Create Library:

image

image

  • 编译生成.lib库文件
  • 自动拷贝编译后的库文件到所需的目录中
    进行这一步是因为:通常.gitignore中会设定忽略/Objects文件夹,这样直接在项目中添加Objects路径下的库文件的话会导致在上传代码时丢失库文件.然后又不想手动拷贝库文件,就用MDK的编译后运行脚本来实现自动拷贝最新的库.
  • 创建批处理文件
    在MDK工程的相同目录,建立一个.bat文件
    image
    右键编辑其内容
set filename=CppUTestCM0.lib
set path=%cd%
copy %path%\Objects\TestLib\%filename% ..\Test\Lib\%filename%
@echo filename:%filename%

这里的库文件名,源路径,目标路径根据你实际项目来更改
image

  • 在Options->User中,设置编译后执行批处理文件
    image
  • 按下编译按钮,从输出可以看到已经成功拷贝了库文件到目标目录下
    image
  • 至此CppUTest库文件创建完成.
posted @ 2022-06-30 18:44  北风Z  阅读(796)  评论(0编辑  收藏  举报