leveldb中带有了大量的测试程序,凡是文件命名中带有_test的文件都是测试代码。就我的理解,阅读测试代码非常要,因为作为一个库,leveldb并不带有main函数,这也不利于我们理解leveldb的结构和流程,而测试代码相当程度上弥补了一点。并且,作为一个在校学生,我们在平时的项目中也极少考虑过写测试代码,今天我就抛砖引玉,以我的水平来剖析下leveldb的测试部分。
leveldb的测试代码还是比较容易让人摸不着头脑的,至少我第一次看是这样。下面我选用db_test.cc文件来举例分析。
测试代码必然有一个主函数入口,在db_test.cc的最下面有main函数:
int main(int argc, char** argv) {
if (argc > 1 && std::string(argv[1]) == "--benchmark") {
leveldb::BM_LogAndApply(1000, 1);
leveldb::BM_LogAndApply(1000, 100);
leveldb::BM_LogAndApply(1000, 10000);
leveldb::BM_LogAndApply(100, 100000);
return 0;
}
return leveldb::test::RunAllTests();
}
如果你看过其他的leveldb测试程序,你就会发现这个leveldb::test::RunAllTests()函数很关键。
这个test是何物?是嵌套在命名空间leveldb下的子命名空间还是一个类,我们利用sublime编辑器搜索test关键字。在文件testharness下发现:
namespace