java - mostrar - afirmar contra afirmaciones JUnit
mostrar texto en jlabel java (6)
Cuando una prueba falla, obtienes más información.
assertEquals(1, 2);
resultados en java.lang.AssertionError: expected:<1> but was:<2>
vs
assert(1 == 2);
resultados en java.lang.AssertionError
puede obtener aún más información si agrega el argumento del mensaje a assertEquals
Hoy vi un caso de prueba de JUnit con una aserción de java en lugar de las aserciones de JUnit. ¿Hay ventajas o desventajas significativas para preferir uno sobre el otro?
Diría que use JUnit en casos de prueba y use la afirmación de java en el código. En otras palabras, el código real nunca tendrá dependencias JUnit, como obvio, y si es una prueba, debe usar las variaciones JUnit de ella, nunca la afirmación.
Es posible que esto no se aplique si usa material que es brillante y nuevo, pero assert no se introdujo en Java hasta 1.4SE. Por lo tanto, si debe trabajar en un entorno con tecnología más antigua, puede inclinarse hacia JUnit por razones de compatibilidad.
Prefiero las aserciones de JUnit ya que ofrecen una API más completa que la declaración de afirmación incorporada y, lo que es más importante, no necesitan estar explícitamente habilitadas a diferencia de assert
, que requiere el argumento de -ea
JVM.
Yo diría que si estás usando JUnit deberías usar las aserciones JUnit. assertTrue()
es básicamente lo mismo que assert
, De lo contrario, ¿por qué incluso usar JUnit?
En JUnit4 la excepción (realmente Error) lanzada por una declaración JUnit es la misma que el error lanzado por la palabra clave java assert
(AssertionError), por lo que es exactamente lo mismo que assertTrue
y que no sea el seguimiento de la pila, no se puede distinguir .
Dicho esto, las afirmaciones tienen que ejecutarse con una bandera especial en la JVM, lo que hace que muchas pruebas parezcan pasar solo porque alguien olvidó configurar el sistema con esa bandera cuando se ejecutaron las pruebas JUnit, lo que no es bueno.
En general, debido a esto, yo diría que usar el JUnit assertTrue
es la mejor práctica, porque garantiza que se ejecuta la prueba, garantiza la consistencia (a veces se usa assertThat
u otras assertThat
que no son una palabra clave java) y si el comportamiento de JUnit afirma que debería cambiar en el futuro (como engancharse en algún tipo de filtro u otra característica futura de JUnit), su código podrá aprovechar eso.
El verdadero propósito de la palabra clave assert en java es poder desactivarlo sin penalización de tiempo de ejecución. Eso no se aplica a las pruebas unitarias.