# 說碼解扣 ## 測試工具-minunit D1211137/貝俊德 # 用途說明: 用c语言编写的极其简单的单元测试框架。使開發人員能夠輕鬆地進行單元測試,幫助確保代碼的可靠性和穩定性。它不使用内存分配,因此在几乎任何情况下都可以正常工作,包括ROMable代码。 # 舉例用途:  假設你有一個C語言項目,你希望確保這些函數在各種情況下都能正確運作。這時,你可以使用minunit來進行測試,通過創建測試函數,指定預期結果。最終運行整個測試套件,minunit 將報告每個測試的通過與否。 這樣,你可以輕鬆地擴展測試套件,確保你的項目在不同情況下都能正確運作。 # 範例程式碼 ``` #include "minunit.h" static int foo = 0; static int bar = 0; static double dbar = 0.1; static const char* foostring = "Thisstring"; void test_setup(void) { foo = 7; bar = 4; } void test_teardown(void) { /* Nothing */ } MU_TEST(test_check) { mu_check(foo == 7); } MU_TEST(test_check_fail) { mu_check(foo != 7); } MU_TEST(test_assert) { mu_assert(foo == 7, "foo should be 7"); } MU_TEST(test_assert_fail) { mu_assert(foo != 7, "foo should be <> 7"); } MU_TEST(test_assert_int_eq) { mu_assert_int_eq(4, bar); } MU_TEST(test_assert_int_eq_fail) { mu_assert_int_eq(5, bar); } MU_TEST(test_assert_double_eq) { mu_assert_double_eq(0.1, dbar); } MU_TEST(test_assert_double_eq_fail) { mu_assert_double_eq(0.2, dbar); } MU_TEST(test_fail) { mu_fail("Fail now!"); } MU_TEST(test_string_eq){ mu_assert_string_eq("Thisstring", foostring); } MU_TEST(test_string_eq_fail){ mu_assert_string_eq("Thatstring", foostring); } MU_TEST_SUITE(test_suite) { MU_SUITE_CONFIGURE(&test_setup, &test_teardown); MU_RUN_TEST(test_check); MU_RUN_TEST(test_assert); MU_RUN_TEST(test_assert_int_eq); MU_RUN_TEST(test_assert_double_eq); MU_RUN_TEST(test_check_fail); MU_RUN_TEST(test_assert_fail); MU_RUN_TEST(test_assert_int_eq_fail); MU_RUN_TEST(test_assert_double_eq_fail); MU_RUN_TEST(test_string_eq); MU_RUN_TEST(test_string_eq_fail); MU_RUN_TEST(test_fail); } int main(int argc, char *argv[]) { MU_RUN_SUITE(test_suite); MU_REPORT(); return MU_EXIT_CODE; } ``` # 變數: 1.[foo]和[bar]:兩個整數變數,用於測試二元堆的插入操作。在 test_setup 函數中被初始化,並在測試中使用。 2.[dbar]:一個雙精度浮點數變數,用於測試二元堆的浮點數插入操作。在 test_setup 函數中被初始化,並在測試中使用。 3.[foostring]: 一個指向常數字符的指標,用於測試字符串相等性。在 test_setup 函數中被初始化,並在測試中使用。 # 函式: 1.[test_setup]:在每次測試之前執行的設置函式。它初始化了變數 foo、bar、dbar 和 foostring。 2.[test_teardown]:在每次測試之後執行的拆卸函式。在這個例子中,它什麼也不做。 3.[test_check]: 使用 mu_check 檢查 foo 是否等於 7。 4.[test_check_fail]: 故意失敗,使用 mu_check 檢查 foo 是否不等於 7。 5.[test_asser]: 使用 mu_assert 檢查 foo 是否等於 7,提供自定義的失敗消息。 6.[test_assert_fail]: 故意失敗,使用 mu_assert 斷言 foo 是否等於 7,提供自定義的失敗消息。 7.[test_assert_int_eq]:使用 mu_assert_int_eq 檢查 bar 是否等於 4。 8.[test_assert_int_eq_fail]:故意失敗,使用 mu_assert_int_eq 斷言 bar 是否等於 5。 9.[test_assert_double_eq]:使用 mu_assert_double_eq 檢查 dbar 是否等於 0.1。 10.[test_assert_double_eq_fail]:故意失敗,使用 mu_assert_double_eq 斷言 dbar 是否等於 0.2。 11.[test_fail]:故意失敗,通過呼叫 mu_fail 提供自定義的失敗消息。 12.[test_string_eq]:使用 mu_assert_string_eq 檢查由 foostring 指向的字符串是否等於 "Thisstring"。 13.[test_string_eq_fail]: 故意失敗,使用 mu_assert_string_eq 斷言由 foostring 指向的字符串是否等於 "Thatstring"。 14.[test_suite]:這個函式定義了一個測試套件,並包含了所有的測試函式。它還為整個套件配置了設置和拆卸函式。 15.[main]:主函式運行整個測試套件並生成測試報告。 # 特色: 1. 統一的測試框架: 使用 minunit 提供了一個統一的測試框架,有助於組織和執行測試。測試函式以 MU_TEST 和 MU_TEST_SUITE 定義,而測試套件的配置使用 MU_SUITE_CONFIGURE。 2. 設定和拆卸函式: 透過 test_setup 和 test_teardown 函式,可以在每個測試函式執行之前進行設定(setup)和之後進行拆卸(teardown)。這有助於確保測試的獨立性和可靠性。 3. 基本檢查和斷言: 使用 mu_check 進行基本檢查,而使用 mu_assert 、 mu_assert_int_eq 、 mu_assert_double_eq 、 mu_assert_string_eq 進行斷言。這些檢查和斷言有助於確保測試中的預期條件得到滿足。 4. 測試失敗處理: 透過 mu_fail 函式,可以故意導致測試失敗,這用於確保測試框架能夠正確處理失敗情況。 5. 測試報告: 使用 MU_REPORT 函式生成測試報告,該報告包含有關每個測試的結果,包括通過的測試數量、失敗的測試數量等。 6. 簡短而清晰的主程式: 主程式簡潔,使用 MU_RUN_SUITE 運行整個測試套件,並返回相應的退出碼。這使得測試的執行和報告變得簡單明瞭。 總的來說,minunit 提供了一個輕量、簡單且易於使用的單元測試框架,適用於小型項目或需要快速實施測試的場景。其主要特色包括統一的框架、設定/拆卸函式、基本檢查和斷言、測試失敗處理和清晰的測試報告。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up