Я не могу понять, как JUnit 4.8 должен работать с сопоставителями Hamcrest. Есть некоторые matchers , определенные внутри junit-4.8.jar
в org.hamcrest.CoreMatchers
. В то же время есть некоторые другие matchers в hamcrest-all-1.1.jar
в org.hamcrest.Matchers
. Итак, куда идти? Должен ли я явно включать Hamcrest JAR в проект и игнорировать сопоставители, предоставляемые JUnit?
В частности, меня интересует empty()
сопоставитель, и я не могу найти его ни в одной из этих банок. Мне нужно что-то еще? :)
И философский вопрос: почему JUnit включил org.hamcrest
пакет в свой собственный дистрибутив вместо того, чтобы побуждать нас использовать оригинальную библиотеку hamcrest?
org.hamcrest.Matchers.empty()
находится? Не могли бы вы дать ссылку на файл JAR?Если вы используете Hamcrest версии выше или равной 1.2, вам следует использовать расширение
junit-dep.jar
. В этой банке нет классов Hamcrest, поэтому вы избегаете проблем с загрузкой классов.Начиная с JUnit 4.11, у
junit.jar
самого себя нет классов Hamcrest. В этом больше нет необходимостиjunit-dep.jar
.источник
Не совсем отвечаю на ваш вопрос, но вам обязательно стоит попробовать FEST-Assert fluent assertions API. Он конкурирует с Hamcrest, но имеет гораздо более простой API, требующий только одного статического импорта. Вот код, предоставленный cpater с использованием FEST:
package com.test; import java.util.ArrayList; import java.util.List; import org.junit.Test; import static org.fest.assertions.Assertions.assertThat; public class EmptyTest { @Test public void testIsEmpty() { List myList = new ArrayList(); assertThat(myList).isEmpty(); } }
РЕДАКТИРОВАТЬ: координаты Maven:
<dependency> <groupId>org.easytesting</groupId> <artifactId>fest-assert</artifactId> <version>1.4</version> <scope>test</scope> </dependency>
источник
Также, если используется JUnit 4.1.1 + Hamcrest 1.3 + Mockito 1.9.5, убедитесь, что mockito-all не используется. Он содержит основные классы Hamcrest. Вместо этого используйте mockito-core. Приведенная ниже конфигурация работает:
<dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>1.9.5</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>hamcrest-core</artifactId> <groupId>org.hamcrest</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.1.1</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>hamcrest-core</artifactId> <groupId>org.hamcrest</groupId> </exclusion> </exclusions> </dependency>
источник
Поскольку версии постоянно меняются, я публикую, чтобы сообщить людям, что по состоянию на 2 декабря 2014 года инструкции на http://www.javacodegeeks.com/2014/03/how-to-test-dependencies-in -a-maven-project-junit-mockito-hamcrest-assertj.html работал у меня. Я не использовал AssertJ, только эти:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>1.9.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.objenesis</groupId> <artifactId>objenesis</artifactId> <version>1.3</version> <scope>test</scope> </dependency>
источник
Я предполагаю, что это потому, что они хотели,
assertThat
чтобы они были частью JUnit. Это означает, чтоAssert
класс должен импортироватьorg.hamcrest.Matcher
интерфейс, и он не может этого сделать, если JUnit не зависит от Hamcrest или не включает (по крайней мере, часть) Hamcrest. И я думаю, что включить часть этого было проще, чтобы JUnit можно было использовать без каких-либо зависимостей.источник
В 2018 году используются самые современные библиотеки:
configurations { all { testCompile.exclude group: "org.hamcrest", module: "hamcrest-core" testCompile.exclude group: "org.hamcrest", module: "hamcrest-library" } } dependencies { testCompile("junit:junit:4.12") // testCompile("org.hamcrest:hamcrest-library:1.3") // testCompile("org.hamcrest:java-hamcrest:2.0.0.0") testCompile("org.hamcrest:hamcrest-junit:2.0.0.0") }
источник
И JUnit-4.12, и JUnit-Dep-4.10 имеют зависимости Hamcrest согласно соответствующим файлам .xml.
Дальнейшее исследование показывает, что, хотя зависимость была сделана в файлах .xml, источник и классы - в jar-файлах. Кажется, это способ исключить зависимость в build.gradle ... проверить его, чтобы все было в чистоте.
Просто к сведению
источник