首页 > 科技 >

嵌入式单元测试--框架解析(2)

2018-06-29 19:07:23 网络整理 阅读:139 评论:0

3. 测试case管理

这是测试框架区别于自己写的assert测试函数最根本的地方。 测试框架为了提高函数利用率,减少重复,方便测试例程汇总等,,都会进行各种封装。比如以下几条。

1)setup和teardown

大部分的测试框架都提供这两个函数,主要是因为有些测试case,有大量重复的代码,比如准备输入数据,测试完毕后清理现场等通用的功能。

2)测试例子汇总

有的叫做TestSuit,有的叫做TestFixtures。把一类相似功能的测试case进行汇总,方便更高层次的调用,也方便用户管理测试例程。

3)测试的调用

多个测试例程汇总后,构成一个数组(表格),启动运行,一般由xxxRun函数负责。

在嵌入式c中,一般都有一个函数指针来操作,这也是为什么所有的测试case的函数名称都使用相同的声明,test_case需要和调用该测试的指针同类型。

4. 测试的执行

测试的执行本质就是函数的长跳转。可以看做在父函数中调用子函数,这个子函数如果是测试例程的话,子函数就会包含assert相关的语句,而assert语句在出错后,会记录错位位置和错误消息,然后进行长跳转(longjmp),longjmp和setjmp(buf)成对出现,返回到调用的位置,然后进行下一个测试case。

for (i = 0 ; i < testSuite->count ; ++i)

{

Test* testCase = testSuite->list[i];

TestRun(testCase);

if (testCase->failed) {

testSuite->failCount += 1;

}

}

1)为了更好的组织测试, 提供的测试组的批量处理功能,一般由for循环遍历一个table数组实现;

2)为了减少重复进行测公用函数提取,比如准备测试环境和清理现场;

3)测试需要的各种断言;

4)断言失败后的跳转、记录错误位置-FILE-, -LINE-宏的使用;

5)测试case运行的监控和结果的汇总。

综上,如果你实现了上面的几个功能,那么也就自己完成了一个测试框架。

其实测试框架是一个很简单的事情,如今测试框架有很多,像VS这样的IDE已经集成了单体测试,所以对于一个开发者怎么规划测试才是测试工作的第一要务。

如何恰当的写测试用例,既不延误开发又不会造成工程臃肿,还能尽可能的覆盖测试范围,这才是测试中最花费功夫的地方。

相关文章