ceedling安装以及简单的使用(上)

一、ceedling简介

        在软件开发领域,软件的质量关于用户体验,对项目的成败至关重要,软件测试作为软件开发中重要的一环,有着十分重要的地位。嵌入式软件由于与硬件打交道,和传统的应用软件测试有着明显的差别。Ceedling就是一款嵌入式软件测试框架。Ceedling提供了一个简单的接口,用于配置从基础到复杂的项目结构。从而可以使用ceedling进行简单工程、有多个依赖库依赖项的工程、多个依赖工具工具的工程的测试代码构建;Ceedling是基于unity的框架,是针对C语言的核心测试框架,专用于嵌入式的;Ceedling是对Ruby的Rake (make-ish)构建系统的扩展,Ceedling主要针对C语言中的测试驱动开发(Test-Driven Development),旨在整合CMock(生成模拟接口)unity(单元测试框架)和 CException(异常处理框架) 这三个很棒的开源项目。

        在整个ceedling框架中,使用unity进行代码测试,使用CMock生成模拟模拟(后面会介绍这部分),使用CException进行异常处理,ceedling本身可以理解为对这三个框架的整合,提供自动化配置、操作等,简化开发。

        Ceedling的官网:Ceedling — Throw The Switch

        Ceedling的github地址:https://github.com/ThrowTheSwitch/

二、安装环境

        环境安装在win10下。Ceedling使用ruby开发脚本,使用GCC工具链编译,因此需要安装ruby和gcc,同时需要将他们添加到环境变量中。

1、安装Ruby

        Ceedling使用ruby开发脚本,因此需要安装ruby环境。Ruby在官网上下载,Ruby的官方网站是:rubyinstaller.org。安装完之后,使用命令行输入指令ruby –version查看,可以看到如下输出,表明安装成功。

2、安装GCC

        使用MinGW安装GCC,一路默认下去,安装好之后在命令行查看。

 

3、安装Ceedling

        命令行中输入gem install ceedling即可安装ceedling,安装好之后,输入ceedling version可以看到如下图所示,表明安装成功。

 三、简单测试

        这里为了演示方便,我们创建一个名为project的目录,创建的ceedling工程名字叫做htq,测试的模块叫做add。先进入project目录,这是一个空目录。

使用ceedling new htq创建测试工程

查看htq目录。

 

 src是存放源代码,test目录是存放要测试的代码。project.yml是整个项目的配置文件(默认名字是project,与工程名字project没有任何关系)。project.yml内容暂时不管。现在各目录基本都是为空,创建测试代码。

 使用ceedling module: create [add]创建要测试的模块

 Ceedling会创建三个文件:add.c、add.h、test_add.c,前两个是我们写的代码,要测试的代码,test_add.c是使用ceedling框架提供的API对他们进行测试的代码。在add.c里面我们添加如下代码:

int add(int a, int b)
{
    int c = a + b;
    return c;
}

 代码很简单,对a、b相加并返回。在test_add.c添加如下代码(只需要在test_add_NeedToImplement添加三行代码即可,其他的ceedling框架会提前自动生成)

        add()是add.c里面的函数,TEST_ASSERT_EQUAL_INT(3, ret);是ceedling框架提供的断言函数,比较INT形数据,3是我们期望的结果,r是实际的结果,二者一致则ceedling通过测试,否则给出对应的错误。现在使用ceedling进行测试,测试指令为ceedling test:all。

        从图中可以看到,测试通过,TESTED表示有多少个测试文件,PASSED表示通过的测试文件。ceedling test:all意思是测试所有的文件,要是想测试某一个文件(本文这里是test_add.c)则需要输入ceedling test: test_add.c即可。这里对代码进行改动下,看看测试错误是什么样的。

 

 改动了这里,期望结果是4,实际结果是3。

 从图中1可以看到,在test_add.c代码的19行出现错误,期望值是4,但实际是3。图中2也显示了错误个数,本次使用的测试指令是ceedling test:test_add.c。

add.c的代码十分简单,也没有以来其他的代码接口,若是依赖了代码接口该如何处理?这里就要引入CMokc部分了,先看简单的测试代码。这里我们在src目录下添加一个fun.h文件,里面声明一个函数接口,

在add.c中调用fun函数。

 在test_add.c中改动代码

         在4、17--20改动代码,在add.c中的第2行添加的是fun.h,表明fun函数的来源,但在test_add.c中添加的是mock_fun.h,这是因为fun.h中的fun函数要使用CMock进行模拟,而非真实存在的函数(我们并没有实现fun函数,只是给了一个接口,其输入时int,输出时int)mock_fun.h中的mock_前缀就是告诉ceedling要使用CMokc模拟该函数,其输入、输出均为int。17行代码fun_ ExpectAndReturn (1, 5),fun对应fun.h的fun函数,但fun_ ExpectAndReturn是CMock生成的(若是有abb函数的声明也会生成abb_ Expect函数),表明fun函数输入的是1,输出的结果是5。运行ceedling测试。

         我们并没有实现fun函数,我们只是使用CMock生成该函数的模拟,并告诉它,当fun函数输入为1时,输出5,我们改下代码,fun输入2,看看结果。

 

 这里里面错误,

         这里显示,fun函数期望输入的是1,但实际接受了2,因此报错。在测试代码时,我们只需要关注要测试的代码部分,该部分代码可能会调用到其他的函数,这些函数不是我们关注的重点,因此,可以使用CMock去生成对应的接口函数,链接到程序中。对于这些CMock生成的函数,我们需要为其指定对应的输入、输出值,之后在测试的代码中会使用到该部分。使用CMock我们可以很方便的将一些不太容易测试的代码改成容易测试的代码(如嵌入式中对硬件的相关操作函数)。

四、总结

        Ceedling使用起来还是比较简单的,很适合嵌入式领域代码测试,本文只是对他的基本操作进行演示,下一篇文章将对它进行稍微深入的分析。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫川宁520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值