Загружайте и анализируйте файловые ресурсы в тестах JUnit5 с помощью всего пары аннотаций.

Привет, разработчики, в этом посте я хочу представить Puma4j, новый проект с открытым исходным кодом, который я недавно опубликовал, который, я надеюсь, облегчит вам жизнь при написании тестов JUnit 5. .

Проверьте репозиторий проекта на Github

Проект

При тестировании микросервисов нам обычно нужно имитировать поведение внешних интеграций, имитируя HTTP-запросы/ответы и сообщения, поступающие в темы или очереди. Для этого нам нужно создать много полезной нагрузки в наших тестах.
Вместо создания тестовых данных в нашем коде, который иногда делает наши тесты немного «грязными», или создания одного и того же стандартного кода все время для чтения и анализа файлов ресурсов, почему бы не использовать JUnit 5 чтобы сделать это простым и стандартизированным способом, а также получить удовольствие от написания нового кода?
Вот почему был создан Puma4j. С помощью Puma4j вы можете загружать и преобразовывать ресурсы с помощью всего пары аннотаций.

Взгляните на пример использования ниже:

Установка с помощью Gradle

implementation "io.github.vitorsalgado.puma4j:puma4j-junit5-extension:4.0.2"

Пример использования

Рассмотрим сценарий, в котором у вас есть следующие файлы в каталоге test resources:

  • модель.json
  • test.txt
  • data.yml
@UsePuma4j
class YourJUnit5Test {

  static class Model {

    public String hello;
  }

  @Res("data.yml")
  private static Model ymlData;

  @Res("test.txt")
  private String txt;

  @Test
  void test(@Res("model.json") Model model) {
    assertEquals("world", model.hello);
    assertEquals("world", ymlData.hello);
    assertEquals("hello world", txt);
  }
}

Следуя приведенному выше примеру, чтобы использовать Puma4j, нам нужно аннотировать наш тестовый класс с помощью '@UsePuma4j', а затем все поля и параметры метода, в которые мы хотим вводить ресурсы. необходимо аннотировать с помощью '@Res(RESOURCE_NAME_AND_EXTENSION).'
Puma4j автоматически загрузит ресурсы и преобразует их в зависимости от типа поля или параметра. Например, вы можете загрузить необработанное значение файла, используя массив строк или байтов.

Поддерживаемые типы файлов

Puma4j может преобразовывать следующие ресурсы в экземпляры объектов Java:

  • JSON
  • YAML
  • Свойства

Содержимое файлов других типов, например .txt, можно загрузить в строку или массив байтов.

Пользовательские конвертеры

Мы можем использовать специальный конвертер для ваших ресурсов. Реализуйте интерфейс Unmarshaller<O> и укажите ссылку на класс в аннотации '@Use(YourCustomConverter.class)'. Аннотацию «@Use» можно применять к параметрам класса, поля и метода.

Переключение конвертеров JSON

По умолчанию Puma4j использует Jackson Object Mapper для преобразования ресурсов JSON в объекты Java. Чтобы переключиться на Gson, используйте аннотацию '@UseGson'. Аннотацию можно применить к параметрам класса, поля и метода. Кроме того, существует «@UseJackson», чтобы заставить определенный ресурс использовать Object Mapper.

Взгляните на документацию проекта и исходный код: