C語言單元測試框架unit的使用

2021-08-31 16:16:31 字數 2569 閱讀 9225

針對c語言的測試框架相比其他語言要少一些,本文簡單介紹一下cunit框架的基本使用方法,權當備忘吧。cunit的組織框架如下圖所示:

將單個測試用例打包到乙個suite中,這些suite在registry中註冊。registry中的所有suite/tests可以使用單個函式呼叫執行,也可以執行選定的套件或測試。下面看乙個例子

首先我們新建檔案,寫乙個待測試函式,這裡以乙個字串轉換數字函式為例,這是我們的第一版實現

// convert.c

// 版本1

int

str_to_int(char* s)

return sum;

}

顯然這個函式是有很多問題的,我們寫乙個測試函式來測試它。

void 

test_str_to_int()

; int real = ;

int i = 0;

for (i = 0; i < sizeof(real)/sizeof(real[0]); i++)

}

測試函式和被測函式寫好之後,我們就可以定義乙個registry 和乙個suite,在suite中新增被測函式,並在registry中註冊。

addtestmodule()

// 在suite中新增被測函式

if (null == cu_add_test(psuite,"str_to_int",test_str_to_int))

return 0;

}

cunit提供了三種模式檢視單元測試結果,分別是控制台模式,基本模式和報表模式

void 

run_test()

assert(null != cu_get_registry());

assert(!cu_is_test_running());

if (0 != addtestmodule())

// 報表模式

// 設定輸出檔名稱

cu_set_output_filename("str_to_int_test_report");

cu_list_tests_to_file();

cu_automated_run_tests();

// 基本模式

// cu_basic_set_mode(cu_brm_verbose);

// cu_basic_run_tests();

// 控制台模式

// cu_console_run_tests();

// cu_console_run_tests();

cu_cleanup_registry();

}

最後寫乙個main函式來呼叫測試函式

#include#include "test.h"

int

main()

編譯執行

gcc -g convert.c main.c test.c -lcunit

./a.out

執行完成後,在當前目錄下可以看到生成了兩個xml檔案,這兩個檔案就是得到的測試結果。

str_to_int_test_report-listing.xml

str_to_int_test_report-results.xml

不過這兩個檔案不能直接開啟,需要把cunit安裝目錄下的另外四個檔案複製過來。如果預設安裝的話,這四個檔案一般在/usr/local/share/cunit目錄下

cunit-list.dtd

cunit-list.xsl

cunit-run.dtd

cunit-run.xsl

把這6個檔案拷貝到同一路徑下,就可以通過ie或者edge瀏覽器檢視輸出結果。

可以看到,9個測試用例有3個沒有通過。改進一下被測函式

// convert.c

// 版本2

int

str_to_int(char* s)

// 排除空格

while (*p == ' ')

p++;

//控制符號

if (*p == '-') else if (*p == '+')

while (*p >= '0' && *p <= '9')

p++;

}return (int)sum * sign;

}

重新編譯,執行,看一下測試結果,這一次9個case全部通過

最簡單的C語言單元測試框架

資料來自internet。最簡單的c語言單元測試框架,只有乙個3行的標頭檔案。如下 cat test mini test.h define mini assert message,test do while 0 define mini test test do while 0 extern int ...

C 單元測試框架學習

前段時間學習和了解了下google的開源c 單元測試框架google test,簡稱gtest,非常的不錯。我們原來使用的是自己實現的一套單元測試框架,在使用過程中,發現越來越多使用不便之處,而這樣不便之處,gtest恰恰很好的解決了。其實gtest本身的實現並不複雜,我們完全可以模仿gtest,不...

c 單元測試框架Catch

catch是乙個不錯的單元測試框架,幫助刷leetcode github在此 define catch config main this tells catch to provide a main only do this in one cpp file include catch.hpp incl...