Статьи

Эффективное хранилище объектов для тестов JUnit

Однажды я столкнулся с проблемой загрузки относительно большого файла двоичных данных из PostgreSQL . Существует несколько ограничений для хранения и извлечения таких данных (все ограничения можно найти в официальной документации ). Для решения проблемы было предложено найти более подходящее хранилище данных.

По некоторым внутренним причинам для этой цели было выбрано хорошо известное ведро Amazon S3. Выбор повлиял на тестовую базу проекта. По-прежнему невозможно использовать легковесные базы данных, такие как HSQL или H2, для реализации тестов. Это ключевая проблема, которую мы попытаемся решить в этой статье.

Вам также может понравиться: Интеграция с хранилищем файлов или хранилищем объектов

Строительство объектов хранения

Одним из возможных решений для поддержания модульных тестов является реализация некоторого хранилища фиктивных объектов, полностью совместимого с клиентом S3 Bucket, с другой стороны, мы могли бы использовать уже существующее хранилище объектов этого типа. MinIO — отличный пример довольно простого, но высокопроизводительного хранилища объектов, которое в то же время совместимо с Amazon S3 (по крайней мере, это написано в документации).

Для интеграции MinIO в наш модульный тест мы будем использовать мощную библиотеку Testcontainers, написанную на Java. Testcontainers — это специальная библиотека, которая поддерживает тесты JUnit и предоставляет легкие, одноразовые экземпляры общих баз данных, веб-браузеры Selenium и все остальное, что может работать в контейнере Docker. Чтобы начать использовать эту удивительную библиотеку, просто нужно иметь Docker и добавить следующую зависимость в наш pom.xml:


XML