Keil中搭建自動化單元測試框架Unity

新一發表於2018-01-07

前言:

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

 

 

相關文章