2016-11-12 83 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();