2016-11-12 5 views
0

私はLevelDBのコードを読んでいますが、私は使用されているTEST_プレフィックスを越えて走っています。私はTEST_が、このメソッドが他の方法では公開されていない内部でも動作するためのテストに使用されていることを示していることを期待しています。このように、私はこれがどれもクリティカルな経路にはないと思っています。私は彼らが主要な方法のどれにもいないと思っています。しかし、例えば、TEST_CompactRangeは、コンパクト・レンジから呼び出されます。コンパクト・レンジは、主要なコンパクション・パスの一部です。このTEST_プレフィックスは何を意味し、どこでこの情報を見つけることができますか?LevelDB TEST_メソッドのプレフィックス

答えて

0

APIの一部ではない公開メソッドには、TEST_接頭辞が使用されているようです。これらのメソッドは、テストを容易にするために公開されているだけで、ユーザーが呼び出さないようにするには、接頭辞TEST_が付いています。

これらのメソッドがクリティカルパスに表示されないのはなぜですか?彼らは私的な方法のようですが、テストのために見えます。

その他の思考:

  • 私はこの命名規則がベストプラクティスであるかどうかはわかりません。 C++にはfriend declarationsというものがあります。明確にするために、私はちょうどTEST_接頭辞を持つメソッドのほんの一握りに基づいた推測を作ってるんだ:
  • 命名規則は、Javaグアバライブラリの@VisibleForTesting注釈

編集に似ています。コードベースをグレープすると、そのようなメソッドだけが次の(すべてのpublic)であることがわかります:

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