pom org matchers matcherassert libreria framework equalto dependency corematchers containsstring assertequals java junit hamcrest

org - libreria hamcrest java



las pruebas de hamcrest siempre fallan (17)

Este es el sitio que me ayuda a resolver el problema.

http://code.google.com/p/hamcrest/issues/detail?id=128

El hamcrest.jar debe ir antes de la biblioteca Junit en la ruta de compilación.

Estoy usando hamcrest 1.3 para probar mi código. Es simplemente un dado. Estoy tratando de probarlo para asegurarme de que el número generado sea menor que 13. Tuve una declaración impresa que imprimía el número generado. El número generado siempre fue menor que 13 pero la prueba siempre falló. ¿Hay algo que estoy haciendo mal?

Este es el código que estoy probando.

import java.util.Random; public class Die { private int numSides; Random rand; public Die(int numSides){ this.numSides = numSides; rand = new Random(System.currentTimeMillis()); } public int roll(){ return rand.nextInt(numSides) + 1; } }

Y este es mi código de prueba.

import static org.hamcrest.Matchers.*; import static org.hamcrest.MatcherAssert.assertThat; import org.junit.Test; public class DieTest { @Test public void testRoll() { Die x = new Die(12); assertThat(x.roll(), is(lessThan(13))); } }

Editar: este es el seguimiento de la pila de fallas.

java.lang.SecurityException: class "org.hamcrest.Matchers"''s signer information does not match signer information of other classes in the same package at java.lang.ClassLoader.checkCerts(Unknown Source) at java.lang.ClassLoader.preDefineClass(Unknown Source) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at DieTest.testRoll(DieTest.java:12) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


En mi Eclipse dentro de la configuración del Proyecto en la sección Ruta de compilación de Java, Bibliotecas ya he agregado una biblioteca JUnit interna que usa JUnit versión 4.8 y la versión 1.1 de hamcrest-core. Creo que eso estaba causando este error en mi caso.

Dejo este bit de información aquí, tal vez alguien más se beneficiaría de mi experiencia.


Use junit-dep.jar en lugar de junit.jar- esto es JUnit menos sus dependencias. Junit.jar contiene una versión anterior de Hamcrest.


Tuve el mismo problema que el detallado aquí. Creo que el problema se reduce al archivo jar junit4.

Si, bajo el editor de eclipse pom, observas la Jerarquía junit4 verás que tiene una dependencia en hamcrest-core (es decir, Hamcrest-core, de forma predeterminada, se extraerá en la compilación). En mi código de prueba de unidad uso la colección Hamcrest Matchers (org.hamcrest.collection). Estos no están incluidos en el contenedor principal y configuré una dependencia en Hamcrest, todo en el pom. Al hacer esto, se duplica la inclusión de hamcrest-core y parece que lo deja abierto a una versión no coincidente con la dependencia de junit hamcrest-core y, por lo tanto, a la excepción de seguridad. Eliminé la dependencia de hamcrest-all y la reemplacé por hamcrest-library y la excepción desapareció.

Si solo utiliza el núcleo de hamcrest, no debe configurar su propia dependencia y confiar en la versión junit pulls. Alternativamente, como se sugiere en otro comentario, use junit-dep para eliminar la dependencia de junit y luego incluya hamcrest-all.


Estaba recibiendo la misma excepción. Al igual que beachw08 recomendado, me referí a:

http://code.google.com/p/hamcrest/issues/detail?id=128

Una de las publicaciones dijo:

cambie el nombre del archivo $ ECLIPSE_HOME / plugins / org.hamcrest.core_1.3.0.v201303031735.jar a algo como * .bak o elimine el archivo.

Hice esto y resolvió mi problema.


Acabo de eliminar la biblioteca JUnit de la configuración de mi proyecto. Todavía puedo ejecutar las pruebas ya que JUnit también está incluido en mi archivo pom. Entonces la solución solo usa la biblioteca de Maven.


Resolví este problema al eliminar la biblioteca Junit4 de la ruta de compilación y agregué la biblioteca TestNG a la ruta de compilación e importé las anotaciones TestNG en lugar de las anotaciones de Junit4 en mi programa java.


En primer lugar, asegúrese de haber agregado la dependencia JUnit en el archivo POM.xml.

Ahora, haga clic derecho en el proyecto y vaya a las propiedades, seleccione la ruta de compilación de Java y seleccione la pestaña Bibliotecas.

En mi caso, había dependencias de Maven, bibliotecas JRE y Junit4. Y acabo de eliminar la biblioteca de Junit y funciona para mí. O uno también puede reordenar las bibliotecas debido a que el orden de construcción de Hamcrest y JUnit4 estaba ocurriendo.


Si obtiene la siguiente excepción "java.lang.SecurityException: class" org.hamcrest.Matchers ", la información del firmante no coincide con la información del firmante de otras clases en el mismo paquete", asegúrese de que el jarrón hamcrest esté antes de la biblioteca Junit en la ruta de compilación Puede configurar el orden en las propiedades del proyecto en Java Build Path en la pestaña Order and Export. haga clic debajo del enlace de la imagen para mayor claridad: http://i.stack.imgur.com/Y5R15.png


Recientemente tuve este problema con eclipse y Junit.

Para resolver esto, hice eso:

1 - Descargue el último archivo jar de hamcrest-all desde aquí: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/hamcrest/

2- Ve a la carpeta de instalación de eclipse: eclipse / plugin / y encuentra la org.hamcrest ... jar

3- hacer una copia de seguridad del frasco del paso 2 y reemplazarlo por el frasco del paso 1 (renombrarlo igual que el frasco paso 2).

4- reiniciar eclipse

Después de eso, mi problema fue resuelto.


Al tratar de resolver este problema para su contexto particular, tenga en cuenta que el seguimiento de la pila anterior es simplemente un síntoma. Las soluciones pueden funcionar para algunas personas, pero no para otras.

Por ejemplo:

  • Poner el Hamcrest JAR antes del JUnit JAR en el classpath funcionará en situaciones donde la versión de JUnit en uso (más antigua) contiene clases de Hamcrest
  • La superposición de la versión de Hamcrest utilizada internamente por Eclipse con una versión ''estándar'' que ha sido renombrada para que coincida con la versión interna puede funcionar si ningún otro paquete de plugins de Eclipse usa información de manifiesto en el JAR interno original

En mi caso, el síntoma anterior fue causado por un Hamcrest JAR utilizado internamente y provisto por Eclipse, y cuando traté de reemplazarlo con una versión de ''stock'' renombrado, todo lo relacionado con JUnit no se pudo cargar cuando inicié Eclipse. Después de volver a la versión interna original, se devolvió SecurityException . La solución que funcionó para mí fue eliminar el manifiesto en el JAR utilizando 7-Zip. Esto efectivamente ''sin firmar'' el JAR y ahora mi configuración particular funciona.


mi entorno Mac OS + eclipse, encontré que org.hamcrest.core_1.3.0.v201303031735.jar está en mi JUnit 4, por lo que no puedo avanzar que junit.jar.

así que lo borro de la ruta ~ / .p2 / pool / plugins /, luego renuevo el proyecto, funciona.


Este resolvió mi problema:

Reemplaza $ ECLIPSE_HOME / plugins / org.hamcrest.core_1.3.0.v201303031735.jar con Maven o la lib de tu proyecto hamcrest-core-xx.jar (obviamente renombrándolo al mismo nombre que eclipse jar)


Ingresé a las propiedades de compilación para el proyecto y cambié JUNIT de la versión 4 a la versión 3 y funciona bien ahora.

Curiosamente, todavía tengo la versión 4 en mi pom.xml, así que me inclino a pensar que se trata de un problema de eclipse (pude construir y ejecutar mis pruebas a través del terminal).


Si está utilizando un proyecto Maven, simplemente elimine la biblioteca Junit de la ruta de compilación e importe en cambio Junit y Hamcrest por separado a través de POM.


Johan Mark (arriba) sugirió a

cambie el nombre del archivo $ECLIPSE_HOME/plugins/org.hamcrest.core_1.3.0.v201303031735.jar a algo como *.bak o elimine el archivo. "

Cambiar el nombre / eliminar el archivo provocó que mi biblioteca Eclipse Junit dejara de funcionar, pero reemplazar el archivo JAR con una copia de la misma versión de mi repositorio Maven hizo que desapareciera el problema del certificado.

(Como alguien en Google comentó, la copia de Eclipse Junit de Hamcrest tiene un número de certificado, pero la copia de Maven no ...)


Hice lo siguiente:

Primero en el archivo pom excluí hamcrest-core de la dependencia junit y usé hamcrest-all en su lugar. En segundo lugar, eliminé de la ruta de compilación el eclipse JUNIT, ya que anula al maven. El pedido no afectó mis jarrones ya que el jar malo fue excluido.