在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式C單元測試框架unity-初體驗

嵌入式USB開發 ? 來源:嵌入式USB開發 ? 作者:嵌入式USB開發 ? 2023-06-08 10:42 ? 次閱讀

本文轉自公眾號,歡迎關注

嵌入式C單元測試框架unity-初體驗 (qq.com)

前言

嵌入式領域,尤其是MCU領域,一般很少有使用單元測試框架,一般就是開發階段開發人員按照自己的習慣和經驗進行自測,然后就是系統集成測試,所以一般在單元測試這一環做的不是很規范。實際上我們在開發中應該要改善這種現狀,加強單元測試的管理,避免單元測試純憑開發人員是否有時間做,做到什么程度也是隨緣。應該由測試來保證開發質量,避免依賴于個人,并且積累測試用例庫,這樣有助于產品迭代穩定,尤其是在BSP等領域,有一個好的測試框架和測試用例集能很好的完成芯片的驗證,和生產測試等工作。

恰好有這樣一個框架,專為嵌入式領域純粹的C測試而生-unity,使用ANSI C編寫,移植性好,資源占用少,就一個C文件和h文件,可以通過h進行一些配置,特別適合MCU開發等領域。

官網

http://www.throwtheswitch.org/

http://www.throwtheswitch.org/unity

下載源碼

https://github.com/ThrowTheSwitch/Unity/

或者

https://github.com/ThrowTheSwitch/Unity/archive/master.zip

使用

http://www.throwtheswitch.org/unity

這個頁面可以看到基本的介紹,瀏覽一下就知道個大概了,

https://github.com/ThrowTheSwitch/Unity/

下的README.md也可以先看一下。

先不管細節,不需要了解很多,不管三七二十一先用了再說。

這里使用某個MCU的開發板,MDK環境進行測試。

我們這里使用源碼中的example_1進行測試。

添加代碼

將下載的源碼Unity\\src下的unity.c,unity.h,unity_internals.h

Unity\\examples下的unity_config.h

放到自己工程的unity目錄下,這一部分是unity源碼

Unity\\examples\\example_1\\src下的所有文件放置到自己工程的src目錄下,這一部分是用戶代碼需要測試的

Unity\\examples\\example_1\\test下的所有文件放置到自己工程的test目錄下,這一部分是測試代碼

圖片

配置頭文件包含路徑

添加上述幾個文件夾到頭文件包含路徑

圖片

依賴

默認依賴打印輸出函數putchar

見unity_internals.h中

#ifndef UNITY_OUTPUT_CHAR


/* Default to using putchar, which is defined in stdio.h */


#include < stdio.h >


#define UNITY_OUTPUT_CHAR(a) (void)putchar(a)


#else


/* If defined as something else, make sure we declare it here so it's ready for use */


#ifdef UNITY_OUTPUT_CHAR_HEADER_DECLARATION


extern void UNITY_OUTPUT_CHAR_HEADER_DECLARATION;


#endif


#endif

我們要根據自己的情況進行移植,

unity_config.h中配置以下宏,其中RS232_putc在我們自己的代碼中實現

圖片

注意:需要在unity_internals.h中#define UNITY_INCLUDE_CONFIG_H 1

或者在工程配置中定義宏UNITY_INCLUDE_CONFIG_H,才會使用unity_config.h

比如MDK工程中設置

圖片

如果已經實現了標準輸入輸出重定向,有putchar則不需要使能這些宏,直接使用putchar。

測試1

example_1中有兩個測試,一個是源碼帶2的一個是不帶2的。

代碼中

先將帶2的相關代碼不進行編譯

圖片

將TestProductionCode_Runner.c中的main函數名改為testrunner_main

在自己工程的main函數中調用該函數(先 extern int testrunner_main(void);申明下函數)

運行程序打印如下

test/TestProductionCode.c:20:test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode:PASS


test/TestProductionCode.c:33:test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken:FAIL: Expected 1 Was 0


test/TestProductionCode.c:41:test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue:PASS


test/TestProductionCode.c:51:test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain:PASS


test/TestProductionCode.c:61:test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed:FAIL: Expected 0x00001234 Was 0x00005A5A


-----------------------


5 Tests 2 Failures 0 Ignored


FAIL

圖片

測試2

使用帶2的代碼

圖片

TestProductionCode2_Runner.c中main函數名改為testrunner2_main

在自己的代碼中調用

testrunner2_main

先 extern int testrunner2_main(void);申明該函數

運行看到輸出如下

test/TestProductionCode2.c:20:test_IgnoredTest:IGNORE: This Test Was Ignored On Purpose


test/TestProductionCode2.c:25:test_AnotherIgnoredTest:IGNORE: These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet


test/TestProductionCode2.c:30:test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented:IGNORE


-----------------------


3 Tests 0 Failures 3 Ignored


OK

圖片

總結

以上可以看到,unnity進行單元測試十分方便,移植也很簡單,先進行一個初體驗,后面再詳細介紹其使用和設計原理。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17148

    瀏覽量

    351186
  • 嵌入式
    +關注

    關注

    5082

    文章

    19123

    瀏覽量

    305151
  • 源碼
    +關注

    關注

    8

    文章

    641

    瀏覽量

    29208
  • Unity
    +關注

    關注

    1

    文章

    127

    瀏覽量

    21829
收藏 人收藏

    評論

    相關推薦

    適合于嵌入式系統的C語言單元測試框架是什么

    適合于嵌入式系統的C語言測試框架CUNIT本文博客鏈接:http://blog.csdn.net/jdh99,作者:jdh,轉載請注明.說明主流語言都有
    發表于 12-15 08:10

    如何搭建嵌入式C語言單元測試自動化框架

    關于嵌入式C語言單元測試自動化框架的搭建思路
    發表于 12-15 07:35

    Tessy嵌入式軟件單元測試/ 集成測試工具的相關資料分享

    Tessy — 嵌入式軟件單元測試/ 集成測試工具本文章向大家介紹Tessy — 嵌入式軟件單元測試/ 集成
    發表于 12-21 07:11

    嵌入式需不需要單元測試

    前言嵌入式行業摸爬滾打這幾年,遇見有規范單元測試的項目寥寥無幾。歸根到底,無非是公司希望快速迭代出產品,有問題等客戶反饋再說。當然,也有人認為是嵌入式行業都是小而美的產品居多,沒有到一定...
    發表于 12-21 08:16

    單元測試/集成測試自動化工具--WinAMS

    CoverageMasterwinAMS : 適用于嵌入式目標機代碼的單元測試/集成測試工具全面支持嵌入式微機!驗證嵌入式
    發表于 06-17 18:26

    如何提高嵌入式軟件單元測試效率

    在本指南中,您將學習如何通過在更短的時間內運行更多的測試來增加您的單元測試吞吐量。 這種效率的提高來自于使用虛擬平臺而不是物理硬件作為開發平臺。 本指南對任何開發或運行嵌入式軟件單元測試
    發表于 08-28 06:31

    嵌入式需要單元測試嗎?

    前言 嵌入式行業摸爬滾打這幾年,遇見有規范單元測試的項目寥寥無幾。歸根到底,無非是公司希望快速迭代出產品,有問題等客戶反饋再說。當然,也有人認為是嵌入式行業都是小而美的產品居多,沒有到一定量級之前
    的頭像 發表于 10-23 16:08 ?2323次閱讀

    慕課嵌入式系統(第六章.單元測試5)

    慕課電子科技大學.嵌入式系統.第六章.嵌入式軟件系統.單元測試50 目錄6 嵌入式軟件系統6.4 單元測試56.4.1課堂重點6.4.2
    發表于 10-20 19:21 ?4次下載
    慕課<b class='flag-5'>嵌入式</b>系統(第六章.<b class='flag-5'>單元測試</b>5)

    慕課嵌入式系統(第二章.單元測試2)

    慕課電子科技大學.嵌入式系統.第二章.嵌入式硬件系統(第一部分.單元測試20 目錄2 嵌入式硬件系統(第一部分)2.6 單元測試22.6.1
    發表于 10-20 22:06 ?3次下載
    慕課<b class='flag-5'>嵌入式</b>系統(第二章.<b class='flag-5'>單元測試</b>2)

    慕課嵌入式開發及應用(第二章.單元測試)

    慕課蘇州大學.嵌入式開發及應用.第二章.入門與軟件框架.單元測試0 目錄2 入門與軟件框架2.10 單元測試2.10.1 課堂重點2.10.
    發表于 11-02 19:21 ?15次下載
    慕課<b class='flag-5'>嵌入式</b>開發及應用(第二章.<b class='flag-5'>單元測試</b>)

    慕課嵌入式開發及應用(第一章.單元測試)

    慕課蘇州大學.嵌入式開發及應用.第一章.基礎與硬件.單元測試0 目錄1 基礎與硬件1.1 單元測試1.1.1課堂重點1.1.2測試與作業2 下一章0 目錄1 基礎與硬件1.1
    發表于 11-02 21:06 ?17次下載
    慕課<b class='flag-5'>嵌入式</b>開發及應用(第一章.<b class='flag-5'>單元測試</b>)

    慕課嵌入式開發及應用(第三章.單元測試)

    慕課蘇州大學.嵌入式開發及應用.第三章.基本模塊.單元測試0 目錄3 基本模塊3.11 單元測試3.11.1 課堂重點3.11.2 測試與作業4 下一章0 目錄3 基本模塊3.11
    發表于 11-03 12:36 ?15次下載
    慕課<b class='flag-5'>嵌入式</b>開發及應用(第三章.<b class='flag-5'>單元測試</b>)

    用在嵌入式開發中的單元測試框架

    在更受限制的環境(例如用 C 編寫的嵌入式系統)中進行單元測試的人來說,這組豐富的功能可能會令人生畏。 但是單元測試的重要之處在于測試
    的頭像 發表于 03-27 10:08 ?1067次閱讀

    嵌入軟件單元測試/集成測試自動化工具

    CoverageMaster winAMS :?適用于嵌入式目標機代碼的單元測試/集成測試工具 全面支持嵌入式微機!驗證嵌入式
    的頭像 發表于 07-11 17:11 ?835次閱讀
    <b class='flag-5'>嵌入</b>軟件<b class='flag-5'>單元測試</b>/集成<b class='flag-5'>測試</b>自動化工具

    單元測試、集成測試自動化工具

    CoverageMaster winAMS :?適用于嵌入式目標機代碼的單元測試/集成測試工具 全面支持嵌入式微機!驗證嵌入式
    的頭像 發表于 06-26 13:41 ?447次閱讀
    <b class='flag-5'>單元測試</b>、集成<b class='flag-5'>測試</b>自動化工具
    主站蜘蛛池模板: 狼人狠狠干| 4438x全国最大色| 69 hd xxxx日本| 天天怕夜夜怕狠狠怕| 黄www片| 美女操网站| 国产热视频| 毛片毛片免费看| 久久久久久久久女黄| 黄视频网站在线看| 人成网站在线观看| aaaa欧美高清免费| 五月天婷婷在线播放| 日韩欧美伦理| 国产精品成人四虎免费视频| 手机看高清特黄a大片| 热99视频| 久久久久久88色偷偷| 狠狠干免费视频| 亚洲人成网站在线| 国产免费私拍一区二区三区| 成人黄色免费网站| 婷婷天堂| 亚洲午夜一级毛片| 热99精品| 国产一级做a爰片久久毛片男 | 天天操综合网| 福利片午夜| 国产成人亚洲日本精品| 欧美性xxxx巨大黑人猛| 日本高清色视频在线观看免费| 天天干在线影院| 在线不卡一区| avtt加勒比手机版天堂网| 一区二区三区久久| 成熟女性毛茸茸xx免费视频| 浮荡视频在线观看免费| 99久热| 亚洲操图| 免费观看视频网站| 欧美视频精品在线|