前言:

  虽然一些C++的自动化单元测试框架也能用来C语言单元测试,但那样我们编写C语言程序时需要符合C++的标准,这样有一些C的特性是无法使用的,限制C的特性使用不太好,于是找了一个全部用C实现的自动化测试框架。Unity是一个简单且直接的自动化单元测试框架,它由很少的几个文件构成。

搭建环境:  

1.从github上下载最新版本的Unity源码,下载链接:https://github.com/ThrowTheSwitch/Unity

2.文件目录介绍

  src         这个文件夹中包含unity.c、unity.h、unity_internals.h,这是最基本的Unity组成,有了这三个文件你就可以开始编写测试用例了。

  docs      Unity相关的文档都在这

  examples    使用Unity的几个例子,包括基本使用、夹具使用、Ruby自动生成用例的使用

  extras     附加能够实现夹具的功能。

  test      Unity所有的测试

  auto      简化测试用例搭建的Ruby脚本

3.根据不同目标平台来配置unity_config.h文件,我使用的是Cortex-m3,配置如下:

#define UNITY_EXCLUDE_LIMITS_H

调用limits.h, UINT_MAX和ULONG_MAX默认是32位

#define UNITY_POINTER_WIDTH 32

设置指针为32位

#define UNITY_INCLUDE_FLOAT

#define UNITY_INCLUDE_DOUBLE

支持Float与Double类型

#ifdef __GNUC__

#define UNITY_OUTPUT_CHAR(a)       __io_putchar(a)

#else

#define UnityPutc(a)            fputc(a, stdout)

#define UNITY_OUTPUT_CHAR(a)       UnityPutc(a)

#endif

Keil中armcc如果使用Gnu标准的话需要重定向到 __io_putchar否则是重定向到fputc。

#define UNITY_WEAK_ATTRIBUTE __attribute((weak))

设置Unity中setup、teardown、suiteSetUp、suiteTearDown为弱函数如,果自己的工程中有setup函数Unity中自动无效而不会产生重定义问题。

具体以源码中介绍为准。

4.在Unity_Internals.h中添加UNITY_INCLUDE_CONFIG_H宏。

5.在Unity.h中添加#include <stdio.h>

6.在keil中添加Unity源文件

7.导入头文件目录路径

8.关于在Debug(printf)Viewer打印信息可以参考链接:http://blog.csdn.net/burgesskzg/article/details/77100453

9.debug.c中对printf的重定向。

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
BYTE c = (BYTE)ch; if (DEMCR & TRCENA)
{
while (ITM_Port32() == )
{
}
ITM_Port8() = c;
} return ch;
}

10.修改ini文件,内容的编写参照8给出的链接

11.切换到SW模式

12.根据处理器设置时钟以及打开ITM端口0

13.根据examples中的测试文档编写测试用例,打开Debug(printf) Viewer,运行的效果如下:

Keil中搭建自动化单元测试框架Unity的更多相关文章

  1. TestNg JAVA 自动化单元测试框架Demo

    TestNg TestNg 是java的一个自动化单元测试框架 参考:http://testng.org/doc/index.html 环境准备 既然是java 的自动化单元测试框架,就必须要有jav ...

  2. 在Python中进行自动化单元测试的教程

    From: https://www.jb51.net/article/64119.htm 一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必 ...

  3. Python Unittest 自动化单元测试框架Demo

    python 测试框架(本文只涉及 PyUnit) https://wiki.python.org/moin/PythonTestingToolsTaxonomy 环境准备 首先确定已经安装有Pyth ...

  4. 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)

    Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...

  5. Pytest单元测试框架:插件-allure-pytest环境搭建并在本地生成一个测试报告

    之前写了allure-pytest的官方文档啃的内容,有些交流的朋友,实践起来没什么头绪,所以就有了这篇文章,也给自己填个坑 第一步:搭建Allure.JDK环境 1. 搭建JDK环境 不装jdk你会 ...

  6. Python自动单元测试框架

    原文链接:http://www.ibm.com/developerworks/cn/linux/l-pyunit/ 软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写 ...

  7. [转] Python自动单元测试框架

    一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施.正像软件熵(software ...

  8. Python单元测试框架unittest之单用例管理(一)

    一.概述 本文介绍python的单元测试框架unittest,unittest原名为PyUnit,是由java的JUnit衍生而来,这是Python自带的标准模块unittest.unittest是基 ...

  9. UI自动化学习笔记- UnitTest单元测试框架详解

    一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...

随机推荐

  1. Windows下MYSQL读取文件为NULL

    只记录解决问题的方法. mysql 版本: 5.7.18 问题: 在执行mysql 函数load_file时,该函数将加载指定文件的内容,存储至相应字段.如: SELECT LOAD_FILE(&qu ...

  2. NYOJ 2356 哈希计划(模拟)

    题目链接: http://acm.nyist.me/JudgeOnline/problem.php?id=2356 题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩&l ...

  3. 安装JDK出现错误:-bash: /usr/java/jdk1.7.0_71/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory解决办法

    1.错误描述:安装好jdk之后,通过java -version,javac,java等命令测试是否安装成功时出现错误-bash: /usr/java/jdk1.7.0_71/bin/java: /li ...

  4. 这个时间格式2017-09-26-T04:00:00Z php识别不出来

    这应该不对吧 这是什么格式?看起来不标准,一般不都是传 2017-09-26 04:00:00 这种吗?不行用正则筛吧.echo date('Y-m-d H:i:s',date_create_from ...

  5. PHPMailer发送邮件失败:SMTP connect failed

    标签: PHPMailersmtp邮件服务器邮件发送失败 2015-05-22 19:29 1755人阅读 评论(0) 收藏 举报 分类: Apache php+mysql(2) 版权声明:本文为博主 ...

  6. mac通过自带的ssh连接Linux服务器并上传解压文件

    需求: 1:mac连接linux服务器 2:将mac上的文件上传到linux服务器指定位置 3:解压文件 mac上使用命令,推荐使用 iterm2 .当然,也可以使用mac自带的终端工具. 操作过程: ...

  7. 【开发技术】Eclipse设置软tab(用4个空格字符代替)及默认utf-8文件编码(unix)

    Eclipse设置软tab(用4个空格字符代替)及默认utf-8文件编码(unix) 本文摘要: 1.如何配置Eclipse中编辑器支持softtab(用数个空格字符代替默认的tab缩进): 2.如何 ...

  8. Java中泛型数组创建总结

    在java中,可以声明一个泛型数组,不能通过直接通过T[] tarr=new T[10]的方式来创建数组,最简单的方式便是通过Array.newInstance(Classtype,int size) ...

  9. FORTH基本堆栈操作

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  10. c:if true、false都显示

    看了半天,最后发现jstl标签库没有引入! <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core ...