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 una sobre la otra?
java
junit
assert
assertions
Robert
fuente
fuente

Respuestas:
En JUnit4, la excepción (en realidad Error) lanzada por una
assertaserción de JUnit es la misma que el error arrojado por la palabra clave java (AssertionError), por lo que es exactamente igualassertTruey diferente al seguimiento de la pila, no podría notar la diferencia.Dicho esto, las afirmaciones tienen que ejecutarse con un indicador especial en la JVM, lo que hace que muchas pruebas parezcan pasar solo porque alguien olvidó configurar el sistema con ese indicador cuando se ejecutaron las pruebas de JUnit, lo que no es bueno.
En general, debido a esto, yo diría que usar JUnit
assertTruees la mejor práctica, porque garantiza que se ejecute la prueba, asegura la consistencia (a veces usaassertThatu otras afirmaciones que no son una palabra clave de Java) y si el comportamiento de JUnit afirma debería cambiar en el futuro (como conectarse a algún tipo de filtro u otra función futura de JUnit) su código podrá aprovechar eso.El propósito real de la palabra clave assert en Java es poder desactivarla sin penalización en tiempo de ejecución. Eso no se aplica a las pruebas unitarias.
fuente
Prefiero las aserciones de JUnit ya que ofrecen una API más rica que la
assertdeclaración incorporada y, lo que es más importante, no necesitan habilitarse explícitamente a diferencia de loassertque requiere el-eaargumento JVM.fuente
-easiempre está habilitadomvn test, no es necesario-ea. Api más rico, buena captura. A veces creo que la API se usa incorrectamente en la prueba porque no es parte de la aplicación (a en api), prefiero llamarla solo métodos más ricos.Cuando una prueba falla, obtienes más información.
assertEquals(1, 2);resultados enjava.lang.AssertionError: expected:<1> but was:<2>vs
assert(1 == 2);resultados enjava.lang.AssertionErrorpuede obtener aún más información si agrega el argumento del mensaje a
assertEqualsfuente
assert 1==2: "1 is not 2";.assertpuede ser preferible, para verificaciones de corrección que afectarían el rendimiento y, por lo tanto, es mejor desactivarlas de forma predeterminada. Sin embargo, mi experiencia es que la mayoría de las afirmaciones deben estar siempre activas.Yo diría que use JUnit asserts en casos de prueba y use Java's assert en el código. En otras palabras, el código real nunca tendrá dependencias JUnit, como es obvio, y si es una prueba, debería usar las variaciones JUnit del mismo, nunca la aserción.
fuente
Yo diría que si está usando JUnit, debe usar las aserciones de JUnit.
assertTrue()es básicamente lo mismo queassert, De lo contrario, ¿por qué usar JUnit?fuente
Assertrequeriría más texto estándar.assertsin JUnit requeriría que escribieras un marco completo.Es posible que esto no se aplique si usa exclusivamente cosas brillantes y nuevas, 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.
fuente