def METHOD_NAME(request):
    """
    Require a Mongo test database.
    Provides a Mongo test database named after the requesting test function. Mongo databases are
    created/destroyed based on the URI provided with the --mongo-uri option and tear-down
    behavior is modified by the --keep-db option.
    """
    from girder.models import _dbClients, getDbConnection, pymongo
    from girder.models import model_base
    from girder.models.user import User
    mockDb = request.config.getoption('--mock-db')
    dbUri = request.config.getoption('--mongo-uri')
    dbName = 'girder_test_%s' % hashlib.md5(_uid(request.node).encode('utf8')).hexdigest()
    keepDb = request.config.getoption('--keep-db')
    realMongoClient = pymongo.MongoClient
    if mockDb:
        pymongo.MongoClient = mongomock.MongoClient
    connection = getDbConnection(uri='%s/%s' % (dbUri, dbName), quiet=False)
    # Force getDbConnection from models to return our connection
    _dbClients[(None, None)] = connection
    connection.drop_database(dbName)
    # Since models store a local reference to the current database, we need to force them all to
    # reconnect
    for model in model_base._modelSingletons:
        model.reconnect()
    # Use faster password hashing to avoid unnecessary testing bottlenecks. Any test case
    # that creates a user goes through the password hashing process, so we avoid actual bcrypt.
    originalCryptContext = User()._cryptContext
    User()._cryptContext = originalCryptContext.copy(schemes=['plaintext'])
    yield connection
    User()._cryptContext = originalCryptContext
    if not keepDb:
        connection.drop_database(dbName)
    connection.close()
    # Clear connection cache and model singletons
    _dbClients.clear()
    for model in model_base._modelSingletons:
        model.__class__._instance = None
    if mockDb:
        pymongo.MongoClient = realMongoClient