在add.h里面也加入相應的函數原型。
這里我們在實現代碼里返回0,是故意使測試用例不通過,因為在TDD里面,講究不通過/通過/重構這么一個持續過程。
現在我們編譯代碼,這樣當然能編譯過了。但是,到目前位置我們還沒有運行我們的測試用例。ok,是在test_add.c里面添加我們的測試用例的時候了:
Suite *make_add_suite(void)
{
Suite *s = suite_create("Add");//建立測試套件(我不知道,這么翻譯對不對?^_^)
TCase *tc_add = tcase_create("add");//建立測試用例集
suite_add_tcase(s, tc_add);//把測試用例集加入到套件中
tcase_add_test(tc_add, test_add);//把我們的測試用例加入到測試集中
return s;
}
在unit_test.h中加入函數原型:Suite *make_add_suite(void);
ok,是時候介紹test_main.c的時候了,該文件代碼如下:
#include "unit_test.h"
#include <stdlib.h>
int main(void)
{
int n;
SRunner *sr;
sr = srunner_create(make_add_suite());//把Suite加入到SRunner里面
srunner_run_all(sr, CK_NORMAL);//運行所有測試用例
n = srunner_ntests_failed(sr);
srunner_free(sr);
return (n==0)? EXIT_SUCCESS: EXIT_FAILURE;
}
我想聰明的朋友也猜到了,為什么運行測試用例的主函數和測試用例本身分別放到不同源文件的原因了。就是為了以后再添加測試用例的時候方便,例如:我現在又增加了減數sub程序,那么為了保持清晰起見,針對sub的測試應該單獨組織源文件test_sub.c,現在只需要在test_main.c中的SRunner中加入sub的Suite即可。
現在編譯測試用例相關文件,運行。就會看見我們的測試用例情況。多少通過,多少沒有通過,沒有通過的測試用例FAIL在那里等等這些信息。
通過上面的介紹,可以發現Check測試框架和其它測試框架,例如CppUnit的使用方式差不多。其實,單純從使用測試框架本身的角度上來看,是非常簡單的。難的是,測試先行究竟該怎么來做,怎么樣來做好,當程序需要訪問數據庫時候,我們該怎么樣來完成測試用例的編寫,這些都是難點。我決定了,明天出去買一本《測試驅動開發》看看,然后注意在編碼過程中,采用測試先行的方式。等我有了這方面的經驗,我會
拿出來和大家共享,也歡迎已經有這方面經驗的兄弟給出自己的心得,指正我上面文章中的錯誤,讓吾輩從中受益!
文章來源于領測軟件測試網 http://www.kjueaiud.com/