Несколько часов назад на github-е популярного TDD-фреймворка JUnit появилась финальная версия JUnit 4.9. Что же вошло в долгожданный релиз?
В основном изменения коснулись введенных в предыдущей версии Правил (
И да, все производные от
Пример тестовой сюиты, которая создает соединение с сервером один единственный раз и закрывает его после выполнения всех тестов сюиты:
Хозяйке на заметку: в свете данных нововведений прежний интерфейс
Правила в комплекте JUnit 4.9 в большинстве своем уже переехали на новый интерфейс. Для большинства пользователей смена API по-идее пройдет незаметно и не потребует изменений в существующих тестах.
До сих пор сборкой пакетов для Maven занимались анонимные добровольцы и качество результатов оставляло желать лучшего. Начиная с версии 4.9 команда разработчиков JUnit перенимает эту задачу на себя. Замечу, однако, что судя по сорцам официальная сборка JUnit по-прежнему происходит в Ant. Будем надеяться, что ребята, все-же справятся с новой задачей грамотно и не наступят, к примеру, на старые грабли с транзитивной зависимостью пакета
Помимо косметических изменений в структуре проекта (текст GPL теперь часть сорцов, Ant-сборка теперь быстрее) были пофиксены серьезные баги:
— github#98: assumeTrue() does not work with expected exceptions
— github#74: Categories + Parameterized
— github#38: ParentRunner filters more than once
— github#248: protected BlockJUnit4ClassRunner#rules method removed from 4.8.2
— github#187: Accidental dependency on Java 6
— github#163: Bad comparison failure message when using assertEquals(String, String)
— github#227: ParentRunner now assumes that getChildren() returns a modifiable list
Список изменений в целом оправдывает minor-release. Выражаю разработчикам глубокую благодарность за их безвозмездный вклад в повышение качества кода и поздравляю хабровчан с хорошей новостью.
Новые Правила
В основном изменения коснулись введенных в предыдущей версии Правил (
@Rule
). Как и прежде функциональность тестов можно расширять дополнительными Правилами на уровне методов. Теперь появилась возможность определять Правила для выполнения целых классов и даже тестовых сюит. В обоих случаях результат достигается путем определения статического поля с новой аннотацией @ClassRule
в соотв. тест-классе, либо в сюите.И да, все производные от
ParentRunner
включая действующий по-умолчанию BlockJUnit4ClassRunner
корректно обрабатывают новый вид правил.Пример тестовой сюиты, которая создает соединение с сервером один единственный раз и закрывает его после выполнения всех тестов сюиты:
<br/>@RunWith(Suite.class)<br/>@SuiteClasses({A.class, B.class, C.class})<br/>public class UsesExternalResource {<br/> public static Server myServer= new Server();<br/> <br/> @ClassRule<br/> public static ExternalResource resource= new ExternalResource() {<br/> @Override<br/> protected void before() throws Throwable {<br/> myServer.connect();<br/> };<br/> <br/> @Override<br/> protected void after() {<br/> myServer.disconnect();<br/> };<br/> };<br/>}<br/> <br/>
Хозяйке на заметку: в свете данных нововведений прежний интерфейс
MethodRule
устарел и получил статус deprecated
. Разработчикам Правил следует работать с новым интерфейсом TestRule
, чтобы дать возможность применять их как с @Rule
так и с @ClassRule
.Правила в комплекте JUnit 4.9 в большинстве своем уже переехали на новый интерфейс. Для большинства пользователей смена API по-идее пройдет незаметно и не потребует изменений в существующих тестах.
Maven – теперь официально
До сих пор сборкой пакетов для Maven занимались анонимные добровольцы и качество результатов оставляло желать лучшего. Начиная с версии 4.9 команда разработчиков JUnit перенимает эту задачу на себя. Замечу, однако, что судя по сорцам официальная сборка JUnit по-прежнему происходит в Ant. Будем надеяться, что ребята, все-же справятся с новой задачей грамотно и не наступят, к примеру, на старые грабли с транзитивной зависимостью пакета
junit-dep
от hamcrest-core
(который до сих пор приходится выпиливать exclusion-ом).Что еще?
Помимо косметических изменений в структуре проекта (текст GPL теперь часть сорцов, Ant-сборка теперь быстрее) были пофиксены серьезные баги:
— github#98: assumeTrue() does not work with expected exceptions
— github#74: Categories + Parameterized
— github#38: ParentRunner filters more than once
— github#248: protected BlockJUnit4ClassRunner#rules method removed from 4.8.2
— github#187: Accidental dependency on Java 6
— github#163: Bad comparison failure message when using assertEquals(String, String)
— github#227: ParentRunner now assumes that getChildren() returns a modifiable list
Вместо заключения
Список изменений в целом оправдывает minor-release. Выражаю разработчикам глубокую благодарность за их безвозмездный вклад в повышение качества кода и поздравляю хабровчан с хорошей новостью.