2016-11-12 81 views
0

我正在阅读LevelDB中的代码,并且一直运行在所使用的TEST_前缀上。我希望TEST_表明这个方法用于测试能够在内部进行操作,否则这些内部操作不会公开。因此,我希望这些都不会在任何关键路径中出现。我希望他们没有主要的方法。但是,例如TEST_CompactRange是从CompactRange中调用的,它是主要压缩路径的一部分。这TEST_前缀是什么意思,我在哪里可以找到这个信息?LevelDB的TEST_前缀方法

回答

0

作者似乎将TEST_前缀用于不打算成为API一部分的公共方法。这些方法是公开的,只是为了使测试更容易,并且它们的前缀为TEST_以阻止用户调用它们。

为什么这些方法不应该出现在关键路径中?它们就像私人方法,但可用于测试。

其他的想法:

  • 我不知道这个命名约定是否是最佳的做法。 C++有friend declarations可以完成类似的事情。
  • 的命名规则是类似于Java番石榴库的@VisibleForTesting注释

编辑:要清楚,我只是做基础上,与TEST_前缀方法的几个猜测。清除代码库显示唯一的这种方法如下(全部公开):

// Compact any files in the named level that overlap [*begin,*end] 
void TEST_CompactRange(int level, const Slice* begin, const Slice* end); 

// Force current memtable contents to be compacted. 
Status TEST_CompactMemTable(); 

// Return an internal iterator over the current state of the database. 
// The keys of this iterator are internal keys (see format.h). 
// The returned iterator should be deleted when no longer needed. 
Iterator* TEST_NewInternalIterator(); 

// Return the maximum overlapping data (in bytes) at next level for any 
// file at a level >= 1. 
int64_t TEST_MaxNextLevelOverlappingBytes();