Подтвердить что ты не робот

Mockito, JUnit, Hamcrest, Versioning

По умолчанию требуемая версия Hamcrest для:

  • JUnit 4.11
    • Hamcrest 1.3
  • Mockito-core 1.9.5
    • Hamcrest 1.1

Между 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

4b9b3361

Ответ 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 - рекомендуемый способ (с использованием артефакта моккитового ядра).