嵌入式自動化單元測試(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作爲平臺,轉寫作者的這篇博客。

https://github.com/dimonomid/test_ceedling_example

下載後,記得將工程植入一個沒有中文的路徑內,因爲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和它集成組件的功能和用法了,敬請期待~

參考資料

  1. Ceedling Unity等嵌入式測試框架和工具的介紹主頁 :http://www.throwtheswitch.org/
  2. Ceedling 的Github主頁: https://github.com/ThrowTheSwitch/Ceedling
  3. CMock 的Github主頁: https://github.com/ThrowTheSwitch/CMock
  4. Unity 的Github主頁: https://github.com/ThrowTheSwitch/Unity
  5. 國外大神使用Ceedling開發一個電壓測量器樣例工程的博客:https://dmitryfrank.com/articles/unit_testing_embedded_c_applications
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章