1. 程式人生 > >嵌入式自動化單元測試(2)-Ceedling

嵌入式自動化單元測試(2)-Ceedling

相信大家都已經初步讀過了《測試驅動的嵌入式C語言開發》這本書了,也大致理解了其思路。不過當我們打算按照書中的內容進行實踐時就會發現,似乎書中提過的Unity框架和Cpptest幾乎很難搜尋到具體的使用和操作資料了。而這個系列就是為了教會大家來在我們熟悉的環境中搭建測試框架的,下面我們正式開始。

什麼是Ceedling

ceeding是一個用ruby語言編寫的c語言自動化測試框架,是一個集成了CMock、Unity和CException等多個開源專案的自動化測試工具(終於我們在書中學到的Unity是不是出現了)。

為什麼要使用ceedling呢,我們當然可以在微控制器的工程內直接使用Unity框架在模擬執行中測試函式。這裡就有一個國外網友在Github搭建好的工程,大家可以克隆下來參考:

https://github.com/smikai/stm32f4-keil-unity 不過這樣帶來的問題是測試程式碼與我們的工程結構交織,而且必須按照正常工程結構編寫測試程式碼,只能應用在一個很小的工程內(也許你不理解這裡我說的是什麼,耐心往下看,當你看到我使用ceedling進行單元測試的工程結構後,你就會理解了)。

搭建測試環境

上面說過ceeding是由ruby語言編寫的,所以很明顯的我們需要在計算機上安裝一個ruby的直譯器,同時為了讓測試框架編譯一個能在我們計算機上執行的測試程式,我們還需要安裝一個gcc編譯器。下面我以在Windos環境中介紹,相信如果你使用的是Linux看完下面的說明也能夠很快的知道怎樣在Linux上搭建。

  1. 安裝Ruby

    https://rubyinstaller.org/上下載安裝Ruby並將其bin路徑新增到系統環境變數PATH中,而後開啟命令視窗使用

    ruby -v
    

    來驗證是否安裝正確

  2. 安裝Ceedling

    ceedling是在ruby gem映象源中的一個軟體,我們開啟命令視窗輸入一下指令來在ruby的安裝路徑中新增ceedling元件。

    gem install ceedling
    
  3. 安裝gcc

    為了在window平臺下執行gcc命令我們需要安裝一個mingw64
    http://www.mingw-w64.org/doku.php/download/mingw-builds
    安裝過程中,除了安裝路徑和處理器構架改為x64之外,其他引數保持預設即可。安裝完畢後同樣將MinGW64安裝目錄下的bin路徑加入 PATH中。而後在CMD視窗中使用指令驗證是否安裝成功。

    gcc -v
    

執行一個樣例工程

我們從Github上拉取一個國外大神編寫的以ceedling框架搭建的工程。這個工程和其readme中附帶的文章連結也是我起初學習ceedling的關鍵資料,當然你可以選擇不看那篇文章,因為接下來我要做的就是重新在一次以STM32作為平臺,轉寫作者的這篇部落格。

下載後,記得將工程植入一個沒有中文的路徑內,因為ruby對中文支援性很差,如果路徑有中文編譯直接就會報錯。我們首先進入工程目錄下的 test_ceedling 資料夾內。在該路徑下開啟命令視窗(不會的去查哦),而後輸入指令:

 ceedling test:all

而後ceedling會自動編譯樣例工程的測試檔案,並執行測試,在命令視窗中也會有編譯和測試過程中的顯示:

Test 'test_adc_handler.c'
-------------------------
Compiling test_adc_handler_runner.c...
Compiling test_adc_handler.c...
Compiling unity.c...
Compiling adc_handler.c...
Compiling cmock.c...
Linking test_adc_handler.out...
Running test_adc_handler.out...


Test 'test_appl_adc.c'
----------------------
Compiling test_appl_adc_runner.c...
Compiling test_appl_adc.c...
Compiling mock_bsp_adc.c...
Compiling mock_adc_handler.c...
Compiling mock_xc.c...
Compiling appl_adc.c...
Linking test_appl_adc.out...
Running test_appl_adc.out...


Test 'test_itoae.c'
-------------------
Compiling test_itoae_runner.c...
Compiling test_itoae.c...
Compiling itoae.c...
Linking test_itoae.out...
Running test_itoae.out...

-----------
TEST OUTPUT
-----------
[test_adc_handler.c]
  - ""

[test_appl_adc.c]
  - ""

[test_itoae.c]
  - ""

--------------------
OVERALL TEST SUMMARY
--------------------
TESTED:  8
PASSED:  8
FAILED:  0
IGNORED: 0

好啦,我們的測試框架已經執行啦,接下來的幾篇中,我們就要來一步一步的仔細介紹ceedling和它整合元件的功能和用法了,敬請期待~

參考資料