OK, entonces la @Ignore
anotación es buena para marcar que no se debe ejecutar un caso de prueba.
Sin embargo, a veces quiero ignorar una prueba basada en información de tiempo de ejecución. Un ejemplo podría ser si tengo una prueba de concurrencia que necesita ejecutarse en una máquina con un cierto número de núcleos. Si esta prueba se ejecutara en una máquina de un solo procesador, no creo que sea correcto pasar la prueba (ya que no se ha ejecutado), y ciertamente no sería correcto fallar la prueba y romper la compilación .
Por lo tanto, quiero poder ignorar las pruebas en tiempo de ejecución, ya que este parece ser el resultado correcto (ya que el marco de prueba permitirá que la compilación pase pero registre que las pruebas no se ejecutaron). Estoy bastante seguro de que la anotación no me dará esta flexibilidad, y sospecho que necesitaré crear manualmente el conjunto de pruebas para la clase en cuestión. Sin embargo, la documentación no menciona nada acerca de esto y al mirar a través de la API tampoco está claro cómo se haría esto programáticamente (es decir, ¿cómo creo programáticamente una instancia Test
o similar que sea equivalente a la creada por la @Ignore
anotación?).
Si alguien ha hecho algo similar en el pasado, o tiene una idea brillante de cómo podría hacer esto, me alegraría saberlo.
fuente
@BeforeClass
anotación, donde puede hacer que su suposición falle allí, lo que saltará toda la clase. Otro es@ClassRule
(para el control de grano fino, pero sobre toda la clase, una vez).Deberías pagar el
Junit-ext
proyecto. Tienen unaRunIf
anotación que realiza pruebas condicionales, como:[Ejemplo de código tomado de su tutorial]
fuente
Assume
directamente para no introducir otra dependencia.@RunIf
separa la condición en la que se debe ejecutar una prueba del código de prueba real, lo que creo que es bueno. Lo que no me gusta es que requiere un corredor de prueba en particular. Por lo tanto, escribí una regla JUnit para ignorar las pruebas.En JUnit 4, otra opción para usted puede ser crear una anotación para indicar que la prueba debe cumplir con sus criterios personalizados, luego extender el corredor predeterminado con los suyos y, utilizando la reflexión, basar su decisión en los criterios personalizados. Puede verse más o menos así:
fuente
BlockJUnit4ClassRunner
ya no ofrece elisIgnored
método.Una nota rápida:
Assume.assumeTrue(condition)
ignora el resto de los pasos pero pasa la prueba. Para fallar la prueba, useorg.junit.Assert.fail()
dentro de la declaración condicional. Funciona igual queAssume.assumeTrue()
pero falla la prueba.fuente