随leveldb一起开源的代码中,还包括一些测试程序, 发现这些测试程序都使用了一些公共的部分代码,很容易编写多个测试用例,自动运行,还能生成测试报告。原来这就是一个简单的测试框架啊,非常实用,实现也很美观,因此记下来。
自动化测试中的必不可少的过程,是需要针对不同的输入条件自动执行测试对象程序,比较输出结果和预期答案,并且提供测试报告, 而使用leveldb中的测试框架实现这些是件很方便的事情。
测试过程中的断言:
每使用一个断言都会产生一个 Tester 的临时对象,断言的时候还允许附加额外的输出信息。
该对象销毁时会判断断言是否成功,如果断言失败,会自动输出此次断言的文件位置以及失败原因,然后退出程序,结束测试。
实现代码如下:
// An instance of Tester is allocated to hold temporary state during // the execution of an assertion. class Tester { private: bool ok_; // 断言是否成功 const char* fname_; // 文件名 int line_; // 行数, 与文件名 一起定位断言失败的位置 std::stringstream ss_; // 断言失败时输出的具体错误信息 public: Tester(const char* f, int l) : ok_(true), fname_(f), line_(l) { }
// 析构时判断断言结果 ~Tester() { if (!ok_) { fprintf(stderr, "