Mockito, JUnit, Hamcrest, Versioning
По умолчанию требуемая версия Hamcrest для:
- JUnit 4.11
- Mockito-core 1.9.5
Между Hamcrest 1.1 и 1.3 не было никаких инсигнифицированных изменений API. В настоящее время мои тестовые примеры пытаются запустить JUnit 4.11 с Hamcrest 1.1, но я разумно уверен, что это плохая идея. По тем же причинам я подозреваю, что попытка использовать Mockito-core 1.9.5 с Hamcrest 1.3 - это и плохая идея.
Что делать?
- Используйте Hamcrest 1.1 с последними версиями JUnit и Mockito
- Используйте Hamcrest 1.3 с последними версиями JUnit и Mockito
- Попытка исправления Mockito-core 1.9.5 для использования Hamcrest 1.3
- Время, которое у меня сейчас нет на самом деле
- Используйте JUnit 4.10
- Другое?
UPDATE 2015-06-12: Оба Mockito 1.10.19 и 2.0.13-beta по-прежнему используют Hamcrest 1.1
Ответы
Ответ 1
Обновление 29 июля 2015 г. by @durron597: Этот отличный ответ был правильным в 2013 году, однако с тех пор он был устаревшим благодаря обновлению Mockito. См. этот ответ
Я использую последний JUnit с основной зависимостью Mockito и hamcrest 1.3 во многих проектах Maven на работе. До сих пор никто не сообщал о каких-либо проблемах с этим. Поэтому, если это работает для ваших тестов, перейдите к новой версии для всех трех. Просто убедитесь, что я использую только ядро mockito.
Поэтому я бы рекомендовал перейти с опцией 2, чтобы иметь все преимущества новых версий. Если вы действительно сомневаетесь, что все может пойти не так, используйте вариант 4, который является самым безопасным. Но, конечно, вы можете пойти с вариантом 2, и когда в ближайшем будущем все будет не так, вы можете переключиться на вариант 2. Или с тех пор более новое mockito уже там решает это.
Примечание от mockito Issue 397: эта проблема не появляется с mockito-core.
Ответ 2
Это решение Maven, предложенное mszalbach:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Ответ 3
Обновление: по состоянию на 30 июня 2015 года последняя версия Mockito использует встроенный Hamcrest 1.3.
Следовательно, эта проблема устарела для тех, кто может перейти на Mockito 2.0.
Я не собираюсь изменять принятый ответ, потому что mszalbach заслуживает того, чтобы сохранить 15 rep, но это должен быть новый канонический ответ
Ответ 4
Глядя на документацию Mockito здесь Я думаю, что вариант 2 - рекомендуемый способ (с использованием артефакта моккитового ядра).