前言:
雖然一些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,運行的效果如下: