2010-05-30 10 views
6

Ho una classe che inizia con:eclEmma: copertura completa del codice sull'intestazione della classe?

public class GeneralID implements WritableComparable<GeneralID>{ 
... 
} 

E un altro che è:

public class LineValuesMapper<KI, VI, KO, VO> extends Mapper<LongWritable, Text, Text, IntWritable>{ 
... 
} 

Tutti i metodi di queste classi sono coperti. Ma non il loro colpo di testa. L'intestazione di entrambe le classi viene dipinta in giallo con EclEmma.

Le istruzioni coperti per queste classi sono:

Element Coverage Covered Instructions Total Instructions 
LineValuesMapper.java 97.3 % 145 149 
GeneralID.java 99.3 % 566 570 

C'è qualcosa che posso fare per coprire integralmente l'intestazione della classe?

+0

Eclemma dovrebbe fornire anche i numeri di copertura nei riquadri sotto l'editor. Cosa dicono quelli? Puoi pubblicare i numeri (blocchi, linee, istruzioni, ecc.) Per la tua classe campione? – jasonmp85

+0

Inoltre, entrambe le classi implementano o estendono tipi parametrici. Questo comportamento è esibito in classi che non usano i generici nelle loro definizioni? – jasonmp85

+0

Ciò si verifica solo in queste due classi che estendono/implementano i tipi parametrizzati. Ho altre classi nella stessa situazione che sono completamente coperte. La differenza è che gli altri tipi di classi parametrizzati sono definiti da me. Questi tipi sono definiti nell'API Hadoop. Ho aggiunto le istruzioni coperte nella mia domanda, sopra. –

risposta

3

Per le classi che estendono superclassi generiche o implementano interfacce generiche, il compilatore può aggiungere metodi di ponte sintetico . Vedi the results of looking at the bytecode di un caso simile.

Forse nelle vostre classi, questi metodi bridge non vengono chiamati. OTOH, ho appena letto che Emma ha un'opzione per ignorare i metodi sintetici o bridge che è abilitato di default.

+0

Stavo distruggendo il cervello per questa risposta prima. Buona pesca. Emma potrebbe avere questa opzione, ma non ricordo se EclEmma lo usa quando sta guidando Emma da Eclipse. – jasonmp85

+2

In questo modo, Enums ha anche alcuni problemi con Emma (http://padcom13.blogspot.com/2009/12/code-coverage-and-enum-types.html). Forse Fork può trovare una soluzione simile? – jasonmp85

+0

Dove lo disabilito? Una cosa che ho notato in entrambe le classi che ho menzionato sopra usa un enum che ho definito altrove. Sto provando a testare l'enum, ma senza fortuna. –

Problemi correlati