Каков хороший шаблон для создания отдельного сервера Redis для модульного тестирования функций чтения / записи в Python? - PullRequest
0 голосов
/ 27 апреля 2020

Я хотел бы создать отдельный сервер Redis, который будет использоваться исключительно для целей модульного тестирования функций чтения / записи в моей кодовой базе.

Причины этого следующие:

  • избегать неудачных операций с ошибками, таких как вызов FLUSHALL или DEL на главном сервере
  • держать тестовые данные отдельно от "живых" данных

До сих пор у меня была следующая идея; написать функцию RedisDb(host="localhost", port=6379), которая оборачивает создание нового соединения с сервером Redis по адресу locahlhost: port. и может использоваться в стандартной инструкции with. Напишите еще одну функцию RedisTestDb(host="localhost", test_port=36379), которая использует функцию RedisDb, чтобы проверить, работает ли сервер Test Redis, создаст ее, если сервер Test Redis не работает, и предоставит к ней соединение. Для полноты картины функция create_redis_test_server(test_port) вызывает redis-server --port <test_port> через модуль подпроцесса Python.

def RedisTestDb(host="localhost", test_port=36379):
    with RedisDb(host="localhost", test_port) as redisDb:
        if not redisDb.ping():
            create_redis_test_server("localhost", test_port)

    return RedisDb(host="localhost", port=test_port)

Приведенный выше фрагмент кода можно затем использовать в модульном тесте, т. Е.

def test_my_write_function():
    with RedisTestDb() as test_redis:
        test_array = numpy.array([0,1,2])
        label = "vector0"
        test_redis.set(label, test_array.tobytes())
        vector_bytes = test_redis.get(label)
        test_redis.delete(label)
        assert numpy.frombuffer(vector_bytes) == test_array

Любые идеи о том, как я мог бы сделать это лучше?

...