Перейти к основному содержимому

[НОВОСТИ] AssertJ 3.6.X – Интервью с Джоэлом Костильолой

· 3 мин. чтения

1. Введение

AssertJ — это библиотека, предоставляющая плавные утверждения для Java. Подробнее об этом можно прочитать здесь и здесь .

Недавно была выпущена версия 3.6.0 вместе с двумя небольшими исправлениями ошибок 3.6.1 и 3.6.2.

Сегодня с нами Джоэл Костильола — создатель библиотеки, который расскажет вам еще немного о релизе и планах на будущее.

«Мы пытаемся сделать AssertJ действительно ориентированным на сообщество»

2. Версии 2.6.0 и 3.6.0 были выпущены почти одновременно. В чем разница между ними?

Версии 2.x ориентированы на Java 7, а версии 3.x — на Java 8. Другой способ увидеть это состоит в том, что 3.x = 2.x + специфические функции Java 8.

3. Какие самые заметные изменения/дополнения появились в 3.6.0/2.6.0?

В 2.6.0 появились другие мелкие функции, но не было больших дополнений. Если бы мне пришлось выбирать, наиболее интересными были бы те, которые связаны с подавленными исключениями:

hasSuppresedException()

hasNoSuppresedExceptions()

3.6.0 дополнительно получил способ проверки множественных утверждений для элементов массива/итерируемых/карты:

  • всеудовлетворить ()
  • hasEntrySatisfying ()

4. С момента выпуска 3.6.0 появилось два выпуска исправлений (3.6.1, 3.6.2). Не могли бы вы рассказать нам немного больше, что там произошло и что нужно было исправить?

В 3.6.1 filteredOn(Predicate) работал только со списком , но не с Iterable, что довольно плохо.

В 3.6.2 мы не додумались извлекать свойства из дефолтного геттера Java 8, оказывается он не работал из коробки после некоторого внутреннего рефакторинга.

Я спросил пользователей, могут ли они дождаться следующей версии, репортер об ошибках сказал мне, что он может подождать, но другой пользователь хотел этого, поэтому я выпустил новую версию. Мы пытаемся сделать AssertJ действительно ориентированным на сообщество , поскольку выпуск релиза обходится дешево (ну, за исключением части документации), я обычно не вижу проблем с релизом.

5. Сталкивались ли вы с какими-либо интересными техническими проблемами при работе над новейшим релизом?

Я укажу на проблему, с которой столкнулся при работе над следующим релизом 3.7.0, который должен выйти через несколько недель.

Java 8 требовательна к «неоднозначным» сигнатурам методов. Мы добавили новый метод assertThat, который принимает ThrowingCallable (простой класс, который является Callable , выбрасывающим исключение). Оказалось, что Java 8 путает его с другим методом assertThat , который принимает Iterable!

Это было самым удивительным для меня, поскольку я не вижу никакой двусмысленности между ними.

6. Планируете ли вы в ближайшее время новый крупный релиз? Что-нибудь, что будет использовать дополнения Java 9?

В ближайшие недели/месяц. Обычно мы стараемся выпускать релизы каждые несколько месяцев или когда появляются крупные дополнения.

Паскаль Шумахер, который присоединился к команде AssertJ, проделал некоторую работу над Java 9, чтобы проверить совместимость, некоторые вещи не работают, в основном те, которые полагаются на самоанализ, поскольку Java 9 меняет правила доступа. Что мы сделаем, так это запустим ветку 4.x, которая будет ориентирована на Java 9, следуя той же стратегии, что и 3.x против 2.x, у нас будет 4.x = 3.x + функции Java 9.

Как только 4.0 будет официально выпущен, мы, скорее всего, прекратим активную разработку 2.x, но продолжим принимать PR, поскольку у нас нет возможности синхронизировать 3 версии, я имею в виду, что мы сообщаем о любых изменениях с версии nx на n+1.x. версию, поэтому добавление чего-либо в 2.x нужно будет сообщать как в 3.x, так и в 4.x, а это слишком много работы на данный момент.