C 語言也可以做TDD,C 語言也可以做Unit Test
https://spin.atomicobject.com/2019/02/07/cmock-get-started/
他的Github
主要有個Ruby 的Tool 可以幫助C 語言的使用者達到Unit Test
Unit Test 當中有一個最重要的概念是需要純電腦執行,環境是被假設成理想的環境
編寫Unit Test 的人必須知道理想上會得到什麼結果
C 語言最麻煩的部分就是會常常跟硬體有連結,例如I2C ,UART 之類的,但是Ceedling 這個工具包裡面有含有可以模仿(Mock) 的工具,CMock 可以幫助你解決這個問題。
例如:我們讀取I2C Address 0x3E 的溫度IC,他會回傳0x55。我們會利用這個0x55 數值來計算溫度。
一般執行的主程式
要開始使用Ceedling 之前,需要開始學會假設:
(這是理想的目標,但如果I2C 不是這樣子想,那也是我們誤會IC 了,需要重新假設。)
I2C Address 0x3E 的溫度IC,他會回傳0x55
例如以下這一段程式碼就是會有假設->執行->確認結果,這三個步驟。
https://marketplace.visualstudio.com/items?itemName=numaru.vscode-ceedling-test-adapter
如果輸入Ceedling Help 看到: Unknown alias: common_defines
可以先把project.yml 當中的 Common Define 刪掉
刪除後
應該會看到
一開始的狀態 | 新增需要的檔案後與刪除多餘Teset 檔案 |
---|---|
test_get_tempature.c
Creating Skeletons 可以加速讓編譯完成,之後再來考慮哪些是需要mock 還是stub 的功能
https://github.com/ThrowTheSwitch/CMock/blob/master/docs/CMock_Summary.md
需要先手動建立一個資料夾 mocks,因為預設的設定檔案是這樣子設定。
把需要mock 的header 檔案放在資料夾當中
ruby C:\Ruby32-x64\lib\ruby\gems\3.2.0\gems\ceedling-0.31.1\vendor\cmock\lib\cmock.rb –skeleton –treat_externs=":include" –skeleton_path=".\mocks"