我们知道一个完整的测试框架还需要有用例过滤和用例统计汇报的功能。由于模板元编程基本没有任何IO能力,所以用例过滤和统计只能借助别的手段(对于用例统计汇报,倒是可以在元编程范畴内完成,但是用例统计结果靠编译告警打印出来格式太难看)。因此我们最后还是使用了一些运行期C++的IO能力。
我们在FIXTURE
和TEST
的宏里面加了一些针对fixture和testcase的注册代码,用户定义的所有fixture和test都会被统计到。如果你希望最终能够打印出用例统计结果,那么定义一个main函数,调用一下TLP_REPORT_ALL_TESTS()
即可。如下:
#include <tlp/test/Test.hpp>
int main()
{
TLP_REPORT_ALL_TESTS();
return 0;
}
实现上述代码后,测试用例就可以编译成一个可执行程序。运行该可执行程序,就会在终端上以我们熟悉的样式打印出所有的fixture和test的统计情况。
注意上述main函数仅是为了输出测试报告。测试用例的运行仍旧是在编译期,一旦编译完成就说明所有测试用例都通过了。如果你不需要测试报告,那么就可以不用实现这个main函数。关于测试用例注册和打印的实现,完全是运行期C++的技术,和本文无关,这里就不再赘述。
至此,整个TLP测试框架涉及到的主要技术就介绍到这里。掌握一门语言最好的方式是从对它进行测试入手,C++模板元编程也不例外。后面对TLP库中其它内容的介绍,都会涉及到对其的测试。如果你还对该测试框架的其它代码细节感兴趣,可以直接访问TLP库,测试框架的所有源代码在"include/tlp/test"目录下。