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
0
A
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();