zoukankan      html  css  js  c++  java
  • 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(0) == 0)
            {
            }
            ITM_Port8(0) = c;
        }
    
        return ch;
    }

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

    11.切换到SW模式

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

     

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

     

  • 相关阅读:
    RandomAccessFile类
    IO_ObjectOutputStream(对象的序列化)
    IO流_文件切割与合并(带配置信息)
    IO流_文件切割与合并
    IO流_SequenceInputStream(序列流)
    10-stack
    9-queue
    16-两种方法全排列
    8-全排列next_permutation
    15-Call to your teacher(有向图的连通判断)
  • 原文地址:https://www.cnblogs.com/gt-xy/p/8227739.html
Copyright © 2011-2022 走看看