LevelDB TEST_方法前缀

LevelDB TEST_ Prefix for Methods

本文关键字:前缀 方法 TEST LevelDB      更新时间:2023-10-16

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

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

为什么这些方法不能出现在关键路径中?它们就像私有方法,但是在测试中是可见的。

其他想法:

  • 我不确定这种命名约定是否是最佳实践。c++也有友元声明,可以完成类似的事情。
  • 命名约定类似于Java Guava库的@VisibleForTesting注释

编辑:要明确的是,我只是根据TEST_前缀的少数方法进行猜测。对代码库进行Grepping显示,只有以下这些方法(都是公共的):

// 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();