2015-04-30 247 views
2

對於我的下一個嵌入式系統項目,我希望採用單元測試。它在技術上可能不是測試驅動開發,但我至少希望事先對單元測試進行測試,並進行全面的單元測試。單元測試使用RTOS的項目

我正在使用IAR EWARM工具鏈。我正在考慮使用cmocka,unity或cunit。我正在學習使用μC/ OS-III作爲RTOS。

下面是問題:單元測試如何與圖片中的RTOS一起工作? E.G:我應該禁用內核和單元作爲單線程應用程序來測試代碼,並存儲所有/大部分內核調用,還是有更好的方法?

示例: 在μC/ OS-III中,入口點仍然是主要的。從main調用任何init代碼,然後調用OSStart()開始多任務處理。所以,當我運行測試工具我也只是不再撥打電話到OSStart()

#ifdef UNIT_TEST 
test_runner(); 
#else 
OSStart(&err); 
#endif 

然後在所有的我只需要模擬消息傳遞和延遲的任務我的應用程序代碼調用內核。

這是做到這一點的最佳方式。或者我會更適合啓動內核,爲我的測試運行器創建一個任務,並將所有任務作爲單個線程運行,或者還有其他一些好的方法,包括從測試工具中產生其他任務。

回答

1

你似乎對單元測試有一個誤解。您的代碼是否使用RTOS並不相關,因爲單元測試涉及單獨測試代碼模塊(即C函數)。測試期間RTOS不會運行。

單元測試還假定您正在測試一組定義代碼功能的需求。 大多數單元測試的目標是能夠提供各種形式的代碼覆蓋。這包括陳述,決定和多重條件決策覆蓋。

語句覆蓋顯示您已經執行了函數中的每一行代碼。

決策覆蓋涉及顯示所有條件的雙方(真/假)都包括在內。

多條件決策覆蓋率(MCDC)用於測試複雜的決策,即如果(和)(並且確保覆蓋所有變體)。 MCDC測試通常僅限於非常關鍵的應用,例如失敗會導致災難性後果的航空電子設備。

子例程通常被存根,即被攔截和控制,以證明每個子程序都是按順序調用的,並且傳遞的參數是正確的,並且各種返回值的功能正確。

我承認我對您提到的工具沒有任何經驗,但有許多商業單元測試工具可用,Cantata,LDRA TestBench,IBM Rational Test Real Time和其他適用於深度單元測試。

也有RTOS本身的商業解決方案。我公司爲μC/ OS-II和μC/ OS-III提供現成的單元和集成測試包。

Scott 已驗證的軟件

+0

這裏沒有誤解。我的測試運行者需要控制並能夠訪問和調用所有要孤立運行的功能。我不介意扼殺和嘲笑操作系統調用,但嘲笑需要額外的時間來設置。因此,問題是,我完全繞過並忽略了內核,還是應該稍微初始化它並創建一個測試運行器任務,以調用我的應用程序代碼 - 我能否以這種方式避免一些嘲諷。或者正在嘗試比它值得更多的麻煩。我一直在裸機系統上進行一些單元測試,這非常簡單。 – Nick

+0

我從你的回答中假設我需要用我的初始本能去存取所有內核調用,並且永遠不啓動RTOS。否則會吠叫錯誤的樹。 – Nick

相關問題