unit test para descargar dependency and java junit dependencies mockito hamcrest

java - test - Mockito, JUnit, Hamcrest, Versiones



junit jar (4)

Actualización: A partir del 30 de junio de 2015, la última versión de Mockito está utilizando Hamcrest 1.3 internamente.

Por lo tanto, este problema está obsoleto para aquellos que pueden actualizarse a Mockito 2.0.

No voy a cambiar la respuesta aceptada porque mszalbach merece mantener la 15 repetición, pero esta debería ser la nueva respuesta canónica.

Por defecto, la versión requerida de Hamcrest para:

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

No hubo cambios de API insiginantes entre Hamcrest 1.1 y 1.3. Actualmente, mis casos de prueba intentan ejecutar JUnit 4.11 con Hamcrest 1.1, pero estoy razonablemente seguro de que esto es una mala idea. Por razones similares, sospecho que tratar de usar Mockito-core 1.9.5 con Hamcrest 1.3 también es una mala idea.

¿Qué hacer?

  1. Utiliza Hamcrest 1.1 con los últimos JUnit y Mockito.
  2. Utiliza Hamcrest 1.3 con los últimos JUnit y Mockito.
  3. Intente parchear Mockito-core 1.9.5 para usar Hamcrest 1.3
    • Tiempo que realmente no tengo en este momento.
  4. Utilice JUnit 4.10
  5. ¿Otro?

ACTUALIZACIÓN 2015-06-12: Tanto Mockito 1.10.19 como 2.0.13-beta aún usan Hamcrest 1.1


Actualización del 29 de julio de 2015 por @ durron597: Esta excelente respuesta fue correcta en 2013, sin embargo, desde entonces se ha quedado obsoleta por una actualización de Mockito. Ver esta respuesta

Uso la última versión de JUnit con dependencia de Mockito y hamcrest 1.3 en muchos proyectos de Maven en el trabajo. Hasta ahora nadie reportó ningún problema con esto. Entonces, si esto funciona para sus pruebas, vaya con la versión más nueva para los tres. Solo asegúrate de usar mockito core en lugar de todo.

Así que recomendaría ir con la opción 2 para tener todos los beneficios de las versiones más nuevas. Si realmente tiene dudas de que algo podría salir mal, use la opción 4, que es la más segura. Pero, por supuesto, podrías optar por la opción 2 y, cuando en un futuro cercano, algo fuera incorrecto, podrías cambiar a la opción 2. O desde entonces, un mockito más nuevo ya está solucionando esto.

Nota de mockito Problema 397 : Este problema no aparece con mockito-core.


Esta es la solución de Maven sugerida por 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>


Mirando la documentación de Mockito here , creo que la opción 2 es la forma recomendada (usando el artefacto mockito-core).