2010-09-28 11 views
5

Uso supuestos junit para decidir si ejecutar una prueba o no.
Las pruebas donde la suposición falla son ignored/skipped por el marco junit.¿Por qué una prueba junit que se omite debido a una falla de asunción no se informa como omitida?

Me pregunto por qué las pruebas omitidas no se informan como 'omitidas'?

Por favor, echar un vistazo al ejemplo:

import static org.junit.Assert.fail; 
import org.junit.Assume; 
import org.junit.Test; 

public class AssumptionTest { 

    @Test 
    public void skipAssumptionFailureTest() { 
     Assume.assumeTrue("foo".equals("bar")); 
     fail("This should not be reached!"); 
    } 
} 

Al ejecutar esta prueba en unos resultados del proyecto experta en:

Running AssumptionTest 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec 

yo preferiría tener este examen reportado como 'saltado'. ¿Hay alguna posibilidad de lograr esto?

(JUnit 4.8.1; 2.2.1 experto; Java 1.6.0_21)

Respuesta

2

No se puede hacer esto fuera de la caja como la única manera de saltarse las pruebas es con el @Ignore anotación. Sin embargo, encontré un blog post que podría ser justo lo que está buscando:

+0

Gracias por la respuesta. Lástima que esto no funcione de la caja. La implementación de un corredor personalizado no funcionará para mí; normalmente ya uso un corredor personalizado (SpringJUnit4ClassRunner) en mis pruebas, que no extenderé. Hubiera preferido una construcción en solución. – FrVaBe

+1

POR FAVOR agregue las partes importantes de la publicación del blog como una respuesta, de lo contrario, esta respuesta será bastante inútil tan pronto como desaparezca esa publicación en el blog. (Estoy impresionado de que nadie haya mencionado esto durante los últimos 7 años) –

2

Spring trae otra variante de una anotación Ignore, que puede decidir en el tiempo de ejecución si ignorar una prueba: @IfProfileValue. En combinación con un usuario suministrado ProfileValueSource en un @ProfileValueSourceConfiguration, puede hacer algunos trucos limitados.

Ver Spring Test Documentation.

Pero no es lo mismo que poder realizar un código de prueba y, en el medio del método de prueba, se decide ignorar la prueba, como se puede con suposiciones.

+0

Buen comentario: seguramente útil para algunos casos de uso. – FrVaBe

+0

Nota: Spring '@ IfProfileValue' solo ** omite/ignora ** la prueba si el nombre y el valor no coinciden y ** no lo ejecuta **. Si desea implementar el tipo de implementación de Categorías JUnit con esto, puede que necesite extender 'SpringJUnit4ClassRunner # runChild' a _not-run_ en lugar de _ignoring_.Esto importa principalmente si sus resultados están en jenkins. – raksja

2

Si bien las respuestas anteriores son buenas por sí solas, me gustaría abordar la pregunta "POR QUÉ".

El problema surgió del hecho de que se contaron las pruebas fallidas/ignoradas. Cuando se agregaron suposiciones, los conteos habituales fueron un poco ensartadas (la suposición puede IGNORAR las pruebas a la mitad de su ejecución).

Los corredores de herramientas también tuvieron problemas con eso, causando informes confusos. Consulte here for Surefire dev conversation with JUnit people y here for related Eclipse bug.

En este momento esto no es un problema en Maven, y no debería ser en los nuevos eclipses. Uso STS basado en eclipse.buildId = 2.9.2.201205071000-RELEASE y todavía experimento este comportamiento.

EDITAR: los enlaces del tipo de referencia no funcionaron.

Cuestiones relacionadas