2010-09-28 8 views
5

Uso le assunzioni di junit per decidere se eseguire o meno un test.
Test in cui l'ipotesi non riesce sono ignored/skipped dal framework junit.Perché un test junit viene saltato a causa di un'ipotesi che l'errore non viene segnalato come saltato?

Mi chiedo perché i test saltati non vengono segnalati come "saltati"?

Si prega di dare un'occhiata all'esempio:

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!"); 
    } 
} 

esecuzione di questo test in una risultati del progetto Maven in:

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

io preferirei avere questa prova segnalato come 'saltato'. C'è qualche possibilità di ottenere questo?

(JUnit 4.8.1; Maven 2.2.1; java 1.6.0_21)

risposta

2

Non si può fare questo out-of-the-box come l'unico modo per saltare i test è con il @Ignore annotazione. Tuttavia, ho trovato un blog post che potrebbe essere proprio quello che stai cercando:

+0

Grazie per la risposta. Peccato che questo non funzioni fuori dalla scatola. L'implementazione di un runner personalizzato non funzionerà per me: normalmente nei miei test utilizzo già un runner personalizzato (SpringJUnit4ClassRunner) che non estenderò. Avrei preferito una build in soluzione. – FrVaBe

+1

PER FAVORE aggiungi le parti importanti del post del blog come risposta, altrimenti questa risposta sarà del tutto inutile non appena quel post del blog scomparirà. (Sono impressionato che nessuno lo abbia mai menzionato negli ultimi 7 anni) –

2

Spring introduce un'altra variante di un'annotazione Ignore, una che è in grado di decidere in fase di esecuzione se ignorare un test: @IfProfileValue. In combinazione con un utente fornito ProfileValueSource in un @ProfileValueSourceConfiguration, è possibile eseguire alcuni trucchi limitati.

Vedere Spring Test Documentation.

Ma non è lo stesso che essere in grado di eseguire qualche codice di test e nel mezzo del metodo di test decidere di ignorare il test, come è possibile con le ipotesi.

+0

Buona annotazione - sicuramente utile per alcuni casi d'uso. – FrVaBe

+0

Nota: Spring '@ IfProfileValue' solo ** salta/ignora ** il test se il nome e il valore non corrispondono e non ** non esegue ** esso. Se si desidera implementare il tipo di implementazione di Categorie JUnit con questo, potrebbe essere necessario estendere 'SpringJUnit4ClassRunner # runChild' a _non-run_ invece di _ignoring_.Questo è importante soprattutto se i suoi risultati sono in jenkins. – raksja

2

Mentre le risposte precedenti vanno bene da sole, vorrei rispondere alla domanda "PERCHÉ".

Il problema derivava dal fatto che i test falliti/ignorati erano contati. Quando sono state aggiunte ipotesi, i conteggi usuali sono stati gentilmente infilzati (l'assunzione può IGNORARE i test a metà della corsa).

I corridori di strumenti hanno avuto problemi anche con quello, causando rapporti disordinati. Vedere here for Surefire dev conversation with JUnit people e here for related Eclipse bug.

Al momento questo non è un problema in Maven, e non dovrebbe essere nei nuovi Eclipse. Io uso STS in base a eclipse.buildId = 2.9.2.201205071000-RELEASE e il problema persiste.

MODIFICA: i collegamenti di tipo di riferimento non hanno funzionato.