APR单元测试框架实现的实在简单,除了断言集之外ABTS只向外部暴露了两个接口:
abts_suite *abts_add_suite(abts_suite *suite, const char *suite_name_full); #define ADD_SUITE(suite) abts_add_suite(suite, __FILE__); |
我们暂时不看函数的实现,先看看几个核心的数据结构。
struct sub_suite { const char *name; int num_test; int failed; int not_run; int not_impl; struct sub_suite *next; }; |
sub_suite对应于对一个模块测试的的测试用例集合,他包含测试的一些统计信息,方便以后生成测试报告。
struct abts_suite { sub_suite *head; sub_suite *tail; }; |
这算是所有sub_suite的根了,我们是在它的基础上构建sub_suite链表的。根据它我们可以找到我们最关心的两个suite。head指向第一个suite,可以方便我们定位整个链表、tail指向最后一个suite,其实定位的是我们当前正在测试的suite。
struct abts_case { int failed; sub_suite *suite; }; |
表示一个测试用例,它不会保存在链表中。被断言集使用,记录断言是否失败。
令人惊叹的是,你在使用这个框架是我们几乎不用关心这3个数据结构,只需要机械的使用ADD_SUITE和abts_run_test 就好了。