嵌入式自动化单元测试(2)-Ceedling

相信大家都已经初步读过了《测试驱动的嵌入式C语言开发》这本书了,也大致理解了其思路。不过当我们打算按照书中的内容进行实践时就会发现,似乎书中提过的Unity框架和Cpptest几乎很难搜索到具体的使用和操作资料了。而这个系列就是为了教会大家来在我们熟悉的环境中搭建测试框架的,下面我们正式开始。

什么是Ceedling

ceeding是一个用ruby语言编写的c语言自动化测试框架,是一个集成了CMock、Unity和CException等多个开源项目的自动化测试工具(终于我们在书中学到的Unity是不是出现了)。

为什么要使用ceedling呢,我们当然可以在单片机的工程内直接使用Unity框架在仿真运行中测试函数。这里就有一个国外网友在Github搭建好的工程,大家可以克隆下来参考:https://github.com/smikai/stm32f4-keil-unity 不过这样带来的问题是测试代码与我们的工程结构交织,而且必须按照正常工程结构编写测试代码,只能应用在一个很小的工程内(也许你不理解这里我说的是什么,耐心往下看,当你看到我使用ceedling进行单元测试的工程结构后,你就会理解了)。

搭建测试环境

上面说过ceeding是由ruby语言编写的,所以很明显的我们需要在计算机上安装一个ruby的解释器,同时为了让测试框架编译一个能在我们计算机上运行的测试程序,我们还需要安装一个gcc编译器。下面我以在Windos环境中介绍,相信如果你使用的是Linux看完下面的说明也能够很快的知道怎样在Linux上搭建。

  1. 安装Ruby

    在https://rubyinstaller.org/上下载安装Ruby并将其bin路径添加到系统环境变量PATH中,而后开启命令窗口使用

    ruby -v
    

    来验证是否安装正确

  2. 安装Ceedling

    ceedling是在ruby gem镜像源中的一个软件,我们打开命令窗口输入一下指令来在ruby的安装路径中添加ceedling组件。

    gem install ceedling
    
  3. 安装gcc

    为了在window平台下运行gcc命令我们需要安装一个mingw64
    http://www.mingw-w64.org/doku.php/download/mingw-builds
    安装过程中,除了安装路径和处理器构架改为x64之外,其他参数保持默认即可。安装完毕后同样将MinGW64安装目录下的bin路径加入 PATH中。而后在CMD窗口中使用指令验证是否安装成功。

    gcc -v
    

运行一个样例工程

我们从Github上拉取一个国外大神编写的以ceedling框架搭建的工程。这个工程和其readme中附带的文章链接也是我起初学习ceedling的关键资料,当然你可以选择不看那篇文章,因为接下来我要做的就是重新在一次以STM32作为平台,转写作者的这篇博客。

https://github.com/dimonomid/test_ceedling_example

下载后,记得将工程植入一个没有中文的路径内,因为ruby对中文支持性很差,如果路径有中文编译直接就会报错。我们首先进入工程目录下的 test_ceedling 文件夹内。在该路径下打开命令窗口(不会的去查哦),而后输入指令:

 ceedling test:all

而后ceedling会自动编译样例工程的测试文件,并运行测试,在命令窗口中也会有编译和测试过程中的显示:

Test 'test_adc_handler.c'
-------------------------
Compiling test_adc_handler_runner.c...
Compiling test_adc_handler.c...
Compiling unity.c...
Compiling adc_handler.c...
Compiling cmock.c...
Linking test_adc_handler.out...
Running test_adc_handler.out...


Test 'test_appl_adc.c'
----------------------
Compiling test_appl_adc_runner.c...
Compiling test_appl_adc.c...
Compiling mock_bsp_adc.c...
Compiling mock_adc_handler.c...
Compiling mock_xc.c...
Compiling appl_adc.c...
Linking test_appl_adc.out...
Running test_appl_adc.out...


Test 'test_itoae.c'
-------------------
Compiling test_itoae_runner.c...
Compiling test_itoae.c...
Compiling itoae.c...
Linking test_itoae.out...
Running test_itoae.out...

-----------
TEST OUTPUT
-----------
[test_adc_handler.c]
  - ""

[test_appl_adc.c]
  - ""

[test_itoae.c]
  - ""

--------------------
OVERALL TEST SUMMARY
--------------------
TESTED:  8
PASSED:  8
FAILED:  0
IGNORED: 0

好啦,我们的测试框架已经运行啦,接下来的几篇中,我们就要来一步一步的仔细介绍ceedling和它集成组件的功能和用法了,敬请期待~

参考资料

  1. Ceedling Unity等嵌入式测试框架和工具的介绍主页 :http://www.throwtheswitch.org/
  2. Ceedling 的Github主页: https://github.com/ThrowTheSwitch/Ceedling
  3. CMock 的Github主页: https://github.com/ThrowTheSwitch/CMock
  4. Unity 的Github主页: https://github.com/ThrowTheSwitch/Unity
  5. 国外大神使用Ceedling开发一个电压测量器样例工程的博客:https://dmitryfrank.com/articles/unit_testing_embedded_c_applications

你可能感兴趣的:(TDD)