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,運行的效果如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM