2012-03-15 4 views
11

Sto usando EclEmma con Eclipse per aiutarmi a sapere dove mancano i test del codice nel mio progetto, ma tutti i test con @RunWith(PowerMockRunner.class) non vengono chiamati e quindi non testato.Perché EclEmma non copre il codice con i test con @RunWith (PowerMockRunner.class)

Utilizzo JUnit 4.8.1 con Mockito.

Cosa potrebbe essere?

+1

Potrebbe fornire ulteriori dettagli come la versione di Mockito, PowerMock ed EclEmma? – Brice

+0

Ehi, sto utilizzando la versione 2.1.0 di eclEmma, ​​è un bug in quella versione, in eclEmma 1.5.x visualizza bene la copertura test. – LottaLava

+0

OK, sembra che _EclEmma_ non usi più _Emma_ dalla versione 2.x. Stanno usando il proprio strumento di copertura che si chiama JaCoCo. Come io non conosco la versione PowerMock che si sta utilizzando, si dovrebbe cercare PowerMock 1.4.11 che include alcune correzioni relative alla JaCoCo: http://powermock.googlecode.com/svn/trunk/changelog.txt – Brice

risposta

0

AFAIK eclEmma, ​​così come molti altri sistemi di copertura, modificare i file .class per aggiungere istruzioni sulla copertura. Molti di questi strumenti lo fanno in "tempo di compilazione", non in fase di esecuzione.

PowerMock invece, così come AspectJ LTW e molti altri sistemi, manipolare lo stesso bytecode ma al "tempo di esecuzione":

PowerMock è un framework che si estendono altre librerie finte come EasyMock con funzionalità più potenti . PowerMock utilizza una manipolazione personalizzata del classloader e del codice byte per abilitare il mocking di metodi statici, costruttori, classi e metodi finali, metodi privati, rimozione di inizializzatori statici e altro.

Ho un problema simile con entrambi eclEmma (varie versioni) e Cobertura in combinazione con AspectJ LTW, causa quando la modifica di esecuzione di file .class accadere, si corrompe in qualche modo la modifica fatto in precedenza dallo strumento di copertura.

Non ho ancora trovato una soluzione, ma almeno ho trovato il sintomo.

La soluzione giusta sarebbe quella di eseguire il debug di strumentazione PowerMock e scoprire dove e come si interrompe gli strumenti di copertura. E 'piuttosto un problema, per uno strumento di test, per rompere gli strumenti di copertura, in quanto i due sono molto spesso utilizzati insieme :)

0

Abbiamo un classi statiche per deridere. Con le classi statiche di simulazione, il plugin di copertura del codice di eclEmma non funziona in Eclipse. Quindi, quello che abbiamo fatto è, quindi collocato @RunWith (JUnit4.class) (Invece di @RunWith (PowerMockRunner.class)) prima della lezione e seguenti linee poste classe all'interno

static { 
PowerMockAgent.initializeIfNeeded(); 
} 

@Rule 
public PowerMockRule rule = new PowerMockRule(); 

Compilato la classe e corse la classe di test. La copertura del codice funziona bene per la classe. Questa modifica è solo per eseguire il plugin eclEmma in Eclipse IDE senza problemi.

Dopo aver scritto casi di test, abbiamo ripristinato il codice alla normalità. Collocato @RunWith (PowerMockRunner.class) anziché @RunWith (JUnit4.class) e commentato sopra le righe di codice statico e powermockrule.