介紹
單元測試框架在面向對象的編程世界中非常流行。JUnit(用于 Java)、SUnit(用于 Smalltalk)和 CppUnit(用于 C++)等框架提供了豐富的功能集。 但是,對于想要在更受限制的環境(例如用 C 編寫的嵌入式系統)中進行單元測試的人來說,這組豐富的功能可能會令人生畏。 但是單元測試的重要之處在于測試,而不是框架。MinUnit 是一個 用 C 語言編寫的極其簡單的單元測試框架。它不使用內存分配,因此它幾乎可以在任何情況下正常工作,包括 ROMable 代碼。
源代碼
/* file: minunit.h */ #define mu_assert(message, test) do { if (!(test)) return message; } while (0) #define mu_run_test(test) do { char *message = test(); tests_run++; if (message) return message; } while (0) extern int tests_run;不,這不是一個錯字。這只是 3 行代碼(這里是 4 行,因為我換了很長的一行。)
設置測試用例
MinUnit 測試用例只是一個函數,如果測試通過則返回 0(null)。如果測試失敗,該函數應該返回一個描述失敗測試的字符串。 mu_assert 只是一個宏,如果傳遞給它的表達式為假,則返回一個字符串。mu_runtest 宏調用另一個測試用例并在該測試用例失敗時返回。這里的所有都是它的!
例子
下面的示例運行兩個測試,一個通過,一個失敗。
/* file minunit_example.c */ #include#include "minunit.h" int tests_run = 0; int foo = 7; int bar = 4; static char * test_foo() { mu_assert("error, foo != 7", foo == 7); return 0; } static char * test_bar() { mu_assert("error, bar != 5", bar == 5); return 0; } static char * all_tests() { mu_run_test(test_foo); mu_run_test(test_bar); return 0; } int main(int argc, char **argv) { char *result = all_tests(); if (result != 0) { printf("%s ", result); } else { printf("ALL TESTS PASSED "); } printf("Tests run: %d ", tests_run); return result != 0; }
結論
人們認為編寫單元測試框架必須很復雜。事實上,正如本技術說明所示,您只需幾行代碼即可編寫一個。當然,如果您可以訪問像 JUnit 這樣的全功能測試框架,請務必使用它。 但如果你不這樣做,你仍然可以使用像 MinUnit 這樣的簡單框架,或者在幾個小時內創建你自己的框架。沒有理由不進行單元測試。
審核編輯:湯梓紅
-
嵌入式系統
+關注
關注
41文章
3645瀏覽量
130092 -
C語言
+關注
關注
180文章
7618瀏覽量
138654 -
字符串
+關注
關注
1文章
587瀏覽量
20695 -
C++
+關注
關注
22文章
2115瀏覽量
74150 -
單元測試
+關注
關注
0文章
43瀏覽量
3218
原文標題:用在嵌入式開發中的單元測試框架
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Tessy嵌入式軟件單元測試/ 集成測試工具的相關資料分享
嵌入式需不需要單元測試?
單元測試/集成測試自動化工具--WinAMS
如何提高嵌入式軟件單元測試效率
使用C++構建嵌入式開發框架
嵌入式需要單元測試嗎?
慕課嵌入式系統(第六章.單元測試5)

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

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

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

評論