В посте Улучшение AssertEquals с JUnit и Hamcrest я представил использование Hamcrest с JUnit . Затем я посмотрел на поддержку встроенного ядра Hamcrest JUnit . В этом посте я расскажу, как применять непрофильные сопоставители Hamcrest с JUnit. Эти неосновные сопоставления НЕ включены в JUnit по умолчанию, но доступны путем включения JAR-файла Hamcrest в classpath.
Хотя включение в JUnit основных сопоставителей Hamcrest упрощает их использование, если нужно использовать только основные сопоставители, такое включение может затруднить использование неосновных сопоставителей и является хорошо известной проблемой .
Поскольку неосновные сопоставители Hamcrest не включены в JUnit, необходимо загрузить JAR Hamcrest. Для моих примеров в этом посте я использую hamcrest-all-1.2.jar .
На следующем снимке экрана показаны проблемы с объединением JAR hamcrest-all с обычной библиотекой JUnit ( JUnit 4.10, как предусмотрено в бета-версии NetBeans 7.2 в моем примере). Как показывает моментальный снимок экрана, когда
junit-4.10.jar включен в библиотеки NetBeans ПЕРЕД hamcrest-all-1.2.jar , предыдущий рабочий код (из моего предыдущего поста ) ломается. И NetBeans, и компилятор командной строки показывают этот разрыв в этом снимке экрана. Переключение порядка тестовых библиотек таким образом, чтобы библиотека Hamcrest была указана первой, а JUnit JAR указана после нее, приводила к разрыву компилятора в тестовом коде. Это показано на следующем снимке экрана.
Хотя переключение порядка зависимых библиотек так, чтобы JAR Hamcrest был включен до того, как JUnit JAR действительно предотвратит проблему сборки, это, как правило, не является удовлетворительным подходом. Этот подход слишком хрупок для долгосрочной ремонтопригодности. К счастью, есть лучший подход, который JUnit напрямую поддерживает для решения этой проблемы.
Можно загрузить специальный JUnit JAR без Hamcrest. Следующий снимок экрана показывает тот, который я использую в этом примере:
junit-dep-4.10.jar . -dep в имени JAR является подсказкой, что он не содержит Hamcrest. Обозначение рядом с JAR на странице загрузки (снимок экрана показан ниже) также указывает на это («Jar без подколенного сухожилия»). С помощью свободной от Hamcrest версии JAR JUnit «dep» я могу включить ее в библиотеки тестов в любое удобное для меня место в связи с JAR Hamcrest и по-прежнему иметь возможность создавать тестовый код. Это гораздо более благоприятный подход, чем полагаться на определенный порядок библиотек тестов. На следующем изображении показан снимок экрана NetBeans и успешная сборка из командной строки, даже если JUnit JAR указан первым.
При использовании соответствующих библиотек (JUnit-dep JAR и Hamcrest «all» JAR) все сопоставители Hamcrest могут использоваться с тестами на основе JUnit. Hamcrest предоставляет множество совпадений, помимо базовых совпадений, которые теперь входят в комплект JUnit. Один из способов получить представление о доступных дополнительных сопоставителях — взглянуть на классы в JAR Hamcrest. Ниже приведен результат выполнения команды
jar tvf для JAR Hamcrest и удаления многих записей, чтобы оставить некоторые наиболее интересные из них. «Основные» средства сопоставления, как правило, основаны на классах в «основном» пакете, а неосновные средства сопоставления, как правило, основаны на классах во всех других пакетах без «ядра» в их названии. |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
4029 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/AllOf.java3592 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/AnyOf.java1774 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/CombinableMatcher.java1754 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/DescribedAs.java1104 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/Every.java2088 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/Is.java1094 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/IsAnything.java2538 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/IsCollectionContaining.java1862 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/IsEqual.java2882 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/IsInstanceOf.java1175 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/IsNot.java1230 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/IsNull.java 960 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/IsSame.java 675 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/StringContains.java 667 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/StringEndsWith.java 678 Thu May 21 23:21:20 MDT 2009 org/hamcrest/<strong>core</strong>/StringStartsWith.java 2557 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArray.java1805 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArrayContaining.java1883 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArrayContainingInAnyOrder.java1765 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArrayContainingInOrder.java1388 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArrayWithSize.java1296 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsCollectionWithSize.java 812 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsEmptyCollection.java 866 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsEmptyIterable.java1086 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsIn.java3426 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsIterableContainingInAnyOrder.java3479 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsIterableContainingInOrder.java 993 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsIterableWithSize.java1899 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsMapContaining.java1493 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsMapContainingKey.java1421 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsMapContainingValue.java1380 Thu May 21 23:21:20 MDT 2009 org/hamcrest/number/IsCloseTo.java2878 Thu May 21 23:21:20 MDT 2009 org/hamcrest/number/OrderingComparison.java1082 Thu May 21 23:21:20 MDT 2009 org/hamcrest/object/HasToString.java 918 Thu May 21 23:21:20 MDT 2009 org/hamcrest/object/IsCompatibleType.java2080 Thu May 21 23:21:20 MDT 2009 org/hamcrest/object/IsEventFrom.java1164 Thu May 21 23:21:20 MDT 2009 org/hamcrest/text/IsEmptyString.java1389 Thu May 21 23:21:20 MDT 2009 org/hamcrest/text/IsEqualIgnoringCase.java2058 Thu May 21 23:21:20 MDT 2009 org/hamcrest/text/IsEqualIgnoringWhiteSpace.java1300 Thu May 21 23:21:20 MDT 2009 org/hamcrest/text/StringContainsInOrder.java4296 Thu May 21 23:21:20 MDT 2009 org/hamcrest/xml/HasXPath.java |
Предоставление JUnit JAR без встроенного в Hamcrest автоматически (JAR «dep») позволяет разработчикам более тщательно создавать свои пути к классам, если для использования с JUnit желательно использовать совпадения Hamcrest выше и за пределами «базовых» соответствий.
Ссылка: Переезд за пределы основного Hamcrest в JUnit от нашего партнера по JCG Дастина Маркса в блоге Inspired by Actual Events .



