介紹
單元測試框架在面向對象的編程世界中非常流行。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文章
3564瀏覽量
129224 -
C語言
+關注
關注
180文章
7598瀏覽量
136174 -
字符串
+關注
關注
1文章
577瀏覽量
20485 -
C++
+關注
關注
22文章
2104瀏覽量
73487 -
單元測試
+關注
關注
0文章
39瀏覽量
3143
原文標題:用在嵌入式開發中的單元測試框架
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論