Информационный бюллетень SitePoint Java VII (02 декабря 2016 г.)

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

Прошлая неделя была важной для JUnit 5! Во вторник вышел новый Java Magazine, который поместил проект на обложку и посвятил ему три статьи. В среду проект выпустил Milestone 3, улучшающий API для инструментов, а также совместимость с JUnit 4.

Следующая веха для JUnit 5

В том маловероятном случае, если вы еще не слышали о JUnit 5, позвольте мне быстро представить его. Если вы это знаете, просто пропустите следующий раздел, чтобы я мог рассказать вам то, чего вы еще не знаете.

Что вы имеете в виду, JUnit 5?

В 2015 году пара основных коммиттеров JUnit и несколько других разработчиков, проявляющих интерес к проекту, решили, что пришло время его переписать. Причины:

  • Потребность в лучшей архитектуре, обеспечивающей ремонтопригодность JUnit и предоставляющей возможности для развития.
  • Необходимость в лучшей модели расширения, которая избавляет от ограничений и сложностей бегунов и правил.
  • Лямбды!

Так родилась JUnit Lambda, которая осенью 2015 года собрала достаточно оплачиваемого времени разработки от работодателей и достаточно финансирования от толпы для согласованных шестинедельных усилий по запуску следующей версии JUnit. Вышел прототип в ноябре 2015 года, за ним последовала альфа-версия в феврале 2016 года, две вехи (М1 и М2) в июле и третья веха 30 ноября.

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



Чтобы получить представление о том, как выглядит проект и куда он хочет двигаться, ознакомьтесь с Состоянием Союза, которое я написал в октябре. Он уже не совсем актуален, но пока изменилось лишь несколько деталей. Если пока это слишком сложно, представьте себе JUnit 4 с множеством продуманных улучшений. На поверхности все изменилось — настоящие жемчужины лежат глубже.

Скажи мне то, чего я еще не знаю!

Хорошо, позвольте мне попробовать. Вы знали…

… что существует отличное руководство пользователя (версия M3 и разработка), которое охватывает большую часть того, что вам нужно знать, всего в 11 000 слов? Также: Javadoc (M3, текущий).

… что ZeroTurnaround опубликовал небольшую шпаргалку по JUnit 5? Если вы все еще новичок в JUnit 5, статья и лист — хороший способ начать работу.

… что после IntelliJ Eclipse — вторая IDE с встроенной поддержкой JUnit 5? Ранний доступ доступен в 4.7 M3.

… что команда Maven недавно внедрила прототип поставщика Surefire, реализованный командой JUnit? Нативная поддержка Maven уже не за горами (хотя проблема в трекере Apache малоактивна). К сожалению, я ничего подобного не слышал от проекта Gradle, в котором, судя по моим поискам, пока нет даже задачи для JUnit 5. При этом существует прототип плагина Gradle, который, как и провайдер Surefire, работает очень хорошо.

… запускать параллельно тесты, написанные в версиях 4 и 5, очень просто? Для более подробного ознакомления с этим ознакомьтесь со статьей Мерта Калискана в журнале Java Magazine.



… что некоторые правила JUnit 4 работают в JUnit Jupiter? В настоящее время правила ExternalResource, Verifier и ExpectedException, а также все их подклассы поддерживаются и могут использоваться в тестах, написанных для Jupiter API. Подробности смотрите в Руководстве.

И, наконец, знаете ли вы, что команда JUnit рада вас слышать? Если у вас есть идея, как улучшить JUnit, или вы хотите оставить отзыв после того, как опробовали его, не стесняйтесь пинговать их в Twitter или, что предпочтительнее, открыть вопрос. Если вы хотите внести свой вклад, тем лучше! Существует ярлык для захвата, который поможет вам найти задачи для начала.

Что нового в Milestone 3?

Так как M3 был выпущен совсем недавно, давайте быстро заглянем в примечания к выпуску. Большинство изменений произошло в платформе JUnit (что? почитайте об архитектуре), которая по своей природе менее захватывающая для таких пользователей, как мы. Тем не менее, там спрятано несколько интересных вещей:

  • По умолчанию каждый класс, оканчивающийся на Test или Tests, рассматривается для выполнения теста.
  • Реализовано/улучшено включение и исключение тестов по тегам, пакетам или именам классов.
  • Если вы использовали средство запуска консоли, обратите внимание, что несколько флагов командной строки имеют новые имена.
  • Чтобы улучшить поддержку альтернативных механизмов тестирования, была введена новая аннотация @Testable, на которую инструменты (особенно IDE) должны обращать внимание при попытке определить, что может быть выполнено в качестве теста.


Юпитер, который содержит API, для которого мы пишем тесты, претерпел гораздо меньше существенных изменений — вот более интересные:

  • Новые утверждения assertTimeout и assertTimeoutPreemptively можно использовать для провала или даже отказа от тестов, которые занимают слишком много времени.
  • @BeforeAll и @AfterAll теперь можно объявлять в статических методах интерфейсов.
  • Ограниченная поддержка правил JUnit 4, но мы уже рассмотрели это выше.

Дай Моара!

Ладно, ладно, господи… Если вам интересно подробно изучить модель расширения, включая некоторые детали реализации, прочитайте мою статью в журнале Java. И последнее, но не менее важное: речь Devoxx BE от меня и от Сэма Браннена. Его в два раза больше, и он работает над проектом и действительно знает, о чем говорит, поэтому, если у вас есть время, посмотрите его выступление.

Что еще происходит?

Ничего особенного (о чем я слышал). AssertJ выпустил версию 3.6.0 с парой небольших улучшений, а вскоре исправляющую ошибки версию 3.6.1. Hibernate выпустил 5.2.5, который позволяет использовать ByteBuddy вместо Javassist — то, что, вероятно, станет стандартом в 6.0.

Подведение итогов

Позвольте мне оставить вас с парой статей, которые, я думаю, могут вас заинтересовать. На сайте SitePoint:







Другие интересные посты о Java:

Посты о разработке ПО в целом:

Желаю вам хорошо провести время!

пока… Николай

PS: Не забудьте подписаться. :)