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, а это слишком много работы на данный момент.