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