2016-11-12 3 views
0

Je lis le code dans LevelDB et je continue à courir à travers un préfixe TEST_ qui est utilisé. Je m'attendrais à ce que TEST_ indique que cette méthode est utilisée pour que les tests puissent fonctionner sur des internes qui ne seraient pas autrement publics. En tant que tel, je m'attendrais à ce que rien de tout cela ne soit dans des chemins critiques. Je m'attendrais à ce qu'ils ne soient dans aucune des méthodes primaires. Cependant, TEST_CompactRange est appelé par exemple à partir de CompactRange qui est en dehors du chemin de compactage principal. Que signifie ce préfixe TEST_, et où puis-je trouver cette information?LevelDB TEST_ Préfixe pour les méthodes

Répondre

0

Les auteurs semblent utiliser le préfixe TEST_ pour les méthodes publiques qui ne sont pas destinées à faire partie de l'API. Les méthodes sont publiques uniquement pour faciliter les tests, et elles sont préfixées par TEST_ pour décourager les utilisateurs de les appeler. Pourquoi ces méthodes n'apparaîtraient-elles pas dans les chemins critiques?

Ils sont comme des méthodes privées, mais visibles pour les tests.

Autres pensées:

  • Je ne suis pas sûr que cette convention de nommage est une meilleure pratique. C++ a friend declarations qui pourrait accomplir quelque chose de similaire.
  • La convention de nommage est similaire à l'annotation de la bibliothèque Java Goyave @VisibleForTesting

Edit: Pour être clair, je fais juste une supposition basée sur la poignée de méthodes avec le préfixe TEST_. Grepping the codebase montre que les seules méthodes de ce type sont les suivantes (toutes publiques):

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