Keil中搭建自动化单元测试框架Unity
前言:
虽然一些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的更多相关文章
- TestNg JAVA 自动化单元测试框架Demo
TestNg TestNg 是java的一个自动化单元测试框架 参考:http://testng.org/doc/index.html 环境准备 既然是java 的自动化单元测试框架,就必须要有jav ...
- 在Python中进行自动化单元测试的教程
From: https://www.jb51.net/article/64119.htm 一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必 ...
- Python Unittest 自动化单元测试框架Demo
python 测试框架(本文只涉及 PyUnit) https://wiki.python.org/moin/PythonTestingToolsTaxonomy 环境准备 首先确定已经安装有Pyth ...
- 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)
Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...
- Pytest单元测试框架:插件-allure-pytest环境搭建并在本地生成一个测试报告
之前写了allure-pytest的官方文档啃的内容,有些交流的朋友,实践起来没什么头绪,所以就有了这篇文章,也给自己填个坑 第一步:搭建Allure.JDK环境 1. 搭建JDK环境 不装jdk你会 ...
- Python自动单元测试框架
原文链接:http://www.ibm.com/developerworks/cn/linux/l-pyunit/ 软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写 ...
- [转] Python自动单元测试框架
一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施.正像软件熵(software ...
- Python单元测试框架unittest之单用例管理(一)
一.概述 本文介绍python的单元测试框架unittest,unittest原名为PyUnit,是由java的JUnit衍生而来,这是Python自带的标准模块unittest.unittest是基 ...
- UI自动化学习笔记- UnitTest单元测试框架详解
一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...
随机推荐
- android企业级商城源码、360°全景图VR源码、全民直播源码等
Android精选源码 [新版]Android技术博客精华汇总 开源了:乐乐音乐5.0-Android音乐播放器 android实现仿真水波纹效果源码 360°全景图VR,这是一个值得把玩的APP a ...
- js第一课总结
一. 当引用了一个src="demo.js"后,scrpit中间不能有js类的任何方法,都不会被执行. <!DOCTYPE html PUBLIC "-//W3C/ ...
- SQL强化(一)保险业务
保险业务 : 表结构 : sql语句 : /*1. 根据投保人电话查询出投保人 姓名 身份证号 所有保单 编号 险种 缴费类型*/SELECTt2.cust_name,t2.idcard,t4.pro ...
- oracle分页查询及原理分析(总结)
oracle分页查询及原理分析(总结) oracle分页查询是开发总为常用的语句之一,一般情况下公司框架会提供只需套用,对于增删改查而言,查是其中最为关键也是最为难的一块,其中就有使用率最高的分页查询 ...
- 从零开始学习前端开发 — 15、CSS3过渡、动画
一.css3过渡 语法: transition: 过渡属性 过渡时间 延迟时间 过渡方式; 1.过渡属性(transition-property) 取值:all 所有发生变化的css属性都添加过渡 e ...
- 数据库 MySQL基础知识
(关于MySQL的安装,具体见下面博客:http://www.cnblogs.com/wj-1314/p/7573242.html) 一.什么是数据库 ? 数据库是按照数据结构来组织,存储和管理数据的 ...
- sqlite效率探测
在编译后当然就是使用sqlite,贸贸然去测试了一下创建数据库,插入数据,仅几条数据,发现,真不错的数据库,后来把数据量提高到10000的 时候,发现,怎么这么慢,后来自己都受不了,网上一查,原来是如 ...
- linux 巨页使用测试以及勘误1
linux使用hugetlbfs的方式来支持巨页,也成为大页. 网上看到有人说巨页不支持read,和write调用,只支持mmap,但是看3.10内核代码的时候发现: const struct fil ...
- PL/SQL FAQ in installation "make sure you have the 32 bits Oracle client installed" and "Database character set(AL32UTF8) and Client character set (GBK) are different"
requirement : connecting to remote oracle server . now I know the connectionURL :connectionUrl :jdb ...
- Linux指令--watch,at
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...