嵌入式應(yīng)用程序中的單元測試應(yīng)用程序代碼是嵌入式開發(fā)人員經(jīng)常忽略的基本需求。乍一看,啟動并運(yùn)行單元測試工具似乎很復(fù)雜。但是,開發(fā)人員可以相對快速地啟動和運(yùn)行單元測試工具環(huán)境。這篇文章將探討
Cpputest 以及開發(fā)人員如何利用現(xiàn)有資源來快速啟動和運(yùn)行環(huán)境。
Cpputest簡介
Cpputest 是一個基于 C/C++ 的測試框架,用于單元測試和測試驅(qū)動代碼。通常,Cpputest 用于測試 C 和
C++ 應(yīng)用程序。該框架為開發(fā)人員提供了一個可以執(zhí)行測試用例的測試工具。Cpputest
還提供了一組可用于測試假設(shè)的斷言。如果結(jié)果不正確,則將測試用例標(biāo)記為未通過測試。
Cpputest
為嵌入式開發(fā)人員提供了一個免費(fèi)的開源框架來構(gòu)建單元測試來證明應(yīng)用程序代碼。通過一些額外的工作,如果他們愿意,開發(fā)人員甚至可以在目標(biāo)上運(yùn)行測試。一般來說,可以使用
Cpputest 來測試存在于硬件抽象層之上的應(yīng)用程序代碼。
安裝 Cpputest
可以使用幾種不同的安裝方法來設(shè)置 Cpputest,可以在 Cpputest 網(wǎng)站上找到。首先是安裝預(yù)打包安裝在 Linux
或 MacOS 上。(如果要在 Windows 上安裝,則需要使用 Cygwin 或類似工具)?;蛘?,開發(fā)人員可以克隆 Cpputest git
存儲庫。
如果你希望快速入門并進(jìn)行一些實驗,我建議你采用不同的方法。James Grenning 組建了一個 Cpputest
入門項目,其中包含開發(fā)人員入門所需的一切。啟動項目包括一個可以加載的 docker 文件和一個安裝和配置環(huán)境的簡單命令。如果你想繼續(xù),請將 Cpputest
入門項目克隆到你計算機(jī)上的合適位置。完成此操作后,你可以按照 James 在 README.md
中的說明進(jìn)行操作,或者按照本節(jié)的其余部分進(jìn)行操作。
在走得太遠(yuǎn)之前,確保你在你的機(jī)器上安裝了 docker 是很重要的。安裝過程因 Linux
風(fēng)格而異,因此你必須搜索一下以找到適合你的方法。
安裝并運(yùn)行 docker 后,嵌入式開發(fā)人員可以使用他們的終端應(yīng)用程序?qū)Ш降?Cpputest
啟動項目目錄的根目錄,然后運(yùn)行以下命令:
docker-compose run cpputest make all
第一次運(yùn)行上述命令時,它需要幾分鐘才能運(yùn)行。之后,該命令將下載 docker 鏡像,克隆并安裝 Cpputest
并構(gòu)建啟動項目。此時,你會在終端中看到類似以下內(nèi)容:
正如你在上面看到的,在第 23 行的 tests/MyFirstTest.cpp 中存在測試用例失敗以及 ERROR: 2
消息。這意味著 Cpputest 和 James 的啟動項目已安裝并正常工作。
利用 Docker 容器
docker-compose run 命令使 docker 加載 cpputest 容器,然后 make
all。一旦命令執(zhí)行完畢,它將離開 docker 容器。在上圖中,這就是我們得到 ERROR: 2. 它返回 docker
容器退出狀態(tài)的錯誤代碼的原因。
沒有必要經(jīng)常使用“docker-compose run cpputest make
all”命令。嵌入式開發(fā)人員還可以使用以下命令進(jìn)入 docker 容器并留在那里:
docker-compose run --rm --entrypoint /bin/bash
cpputest
通過這樣做,開發(fā)人員可以簡單地使用命令“make”或“make
all”。這樣做的好處是它稍微簡化了流程,并刪除了從原始命令退出 docker 映像時返回的 ERROR 消息。因此,例如,如果我運(yùn)行 docker 命令并
make,測試工具的輸出現(xiàn)在如下所示:
要退出 docker 容器,我需要做的就是輸入 exit。
試運(yùn)行Cpputest
現(xiàn)在我們已經(jīng)設(shè)置了 Cpputest
入門項目,很容易進(jìn)入并開始使用測試工具。在添加我們自己的任何測試之前,我們應(yīng)該刪除最初的失敗測試用例。此測試用例位于
/tests/MyFirstTest.cpp 中??梢允褂媚阆矚g的文本編輯器打開該文件。你會從上圖中注意到測試失敗發(fā)生在第 23
行。該行包含以下內(nèi)容:
FAIL("Your test is running! Now delete this line and watch
your test pass.");
FAIL 是一個內(nèi)置于 Cpputest 中的斷言。所以首先要嘗試的是注釋掉該行,然后運(yùn)行“make”或“make
all”命令。如果這樣做,你將看到測試工具現(xiàn)在成功運(yùn)行,沒有任何失敗的測試用例,如下所示:
現(xiàn)在你可以使用 Cpputest 手冊中的斷言開始構(gòu)建你的單元測試用例。嵌入式開發(fā)人員可能決定刪除
MyFirstTest.cpp 并添加他們的測試模塊或開始實施他們的測試用例。這完全取決于你的最終目的。
結(jié)論
我們已經(jīng)簡要討論了如何快速啟動和運(yùn)行 Cpputest。使用 Cpputest
非常簡單,而且結(jié)果令人信服。開發(fā)人員可以利用他們的測試工具和斷言來檢查代碼是否按預(yù)期工作。如果出現(xiàn)問題,運(yùn)行測試工具會將開發(fā)人員指向失敗的測試用例并提供失敗測試的行號。測試工具可以幫助開發(fā)人員執(zhí)行自動化回歸測試并快速識別代碼中的錯誤。
開發(fā)人員不一定非要使用 Cpputest。有許多可用的單元測試工具。然而,嵌入式開發(fā)人員需要使用某種類型的測試工具,而
Cpputest 很容易啟動和運(yùn)行,并且?guī)缀蹩梢约傻饺魏螛?gòu)建過程中。