参照前面的文档,继续单元测试check的试验()
试验1:(增加一个新的函数) 在add.c中增加一个sub函数,新的add.c
int sub(int i, int j)
{
int res=0;
res=i-j;
return res; }
|
在add.h中增加sub函数的定义
编译一下,通过了,但是没有运行测试,现在增加一个测试,test_main.c不用动,需要修改test_add.c文件,修改后变成这样(红色是新加的语句)
#include "check.h"
#include "uni_test.h"
START_TEST(test_add)
{
fail_unless(add(2, 3) == 5, "god, 2+3!=5");
fail_unless(add(4,4 ) == 8, "god, 4+4!=8");
}
END_TEST
START_TEST(test_sub)
{
fail_unless(sub(2, 3) == -1, "god, 2-3!=-1");
}
END_TEST
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);//把我们的测试用例加入到测试集中
tcase_add_test(tc_add, test_sub);//新增加的测试用例
return s;
}
|
重新编译,运行,结果如下
Running suite(s): Add
100%: Checks: 2, Failures: 0, Errors: 0
|
基础知识: fail_unless(判断条件,输出字符串) //如果判断条件不成立,输出字符串 fail_if(判断条件,输出字符串)//与fail_unless正相反,输出字符串可以是NULL 输出字符串支持可打印格式例句:
fail_unless(add(2, 3) == 5, "god, 2+3!=5");
fail_if(add(4,4 ) == 8, NULL);
fail_unless(sub(2, 3) == -1, "god, 2-3!=-1");
fail_if(add(4,4 ) != 8, NULL); fail_unless(add(5,6) == 10, "add() 发生错误,结果应当%d",add(5,6)); |
运行测试用例的函数定义(在例子test_main.c中):
| void srunner_run_all (SRunner * sr, enum print_output print_mode);
|
这个函数做2个事情:
- 运行所有测试用例,并收集结果
根据print_mode
输出结果
另外一个输入函数:当 SRunners 已经运行过了,可以用srunner_print输出结果
| void srunner_print (SRunner *sr, enum print_output print_mode);
|
输出结果的样式是个枚举值,在check.h中定义了
-
-
CK_SILENT
没有输出
-
CK_MINIMAL
摘要输出(number run, passed,
failed, errors).
-
CK_NORMAL
正常输出,打印摘要和每条错误信息
-
CK_VERBOSE
详细输出,打印摘要和每条测试结果
-
-
CK_ENV
从环境变量取得输出样式
Gets the print mode from the environment variable CK_VERBOSITY
,
which can have the values "silent", "minimal", "normal", "verbose". If
the variable is not found or the value is not recognized, the print
mode is set to CK_NORMAL
.
-
CK_SUBUNIT
Prints running progress through the test runner protocol. See 'subunit support' under the Advanced Features section for more information.
试验二:(setup()
and teardown()
)准备环境 可以利用这两个函数实现测试用例的环境准备,控制流的顺序
unchecked_setup();
fork();
checked_setup();
check_one();//(用例1)
checked_teardown();
wait();
fork();
checked_setup();
check_two();//用例2
checked_teardown();
wait();
unchecked_teardown();
使用 tcase_add_checked_fixture()加入测试用例集
阅读(2593) | 评论(0) | 转发(0) |