2012-06-08 19 views
5

Acabo de escribir un código de muestra simple para asegurarme de que tenía EclEmma instalado correctamente. No obtengo una cobertura del 100%, y no entiendo por qué. El resaltado implica que tiene que ver con el nombre de la clase. Aquí está mi código, con las correspondientes pruebas JUnit, la forma EclEmma destacó que:¿Puede el código completamente cubierto tener una calificación de cobertura EclEmma de menos del 100%?

Arithmetic class

Tests for Arithmetic class

Los resultados de cobertura muestran que tres instrucciones en Arithmetic no están obteniendo éxito, a pesar de que ambos métodos actuales parecen para ser completamente cubierto:

Coverage information

he leído the EclEmma documentation about basic block coverage, pero estoy sigo confundido. No estoy seguro de qué bloques básicos se están perdiendo. Al principio, pensé que EclEmma podría estar ignorando el bytecode para las clases, pero ArithmeticTest parece manejarse bien.

He dos cuestiones relacionadas entre sí:

  1. ¿Esto indica un problema con la forma en que he instalado/configurado EclEmma?
  2. ¿Es normal/aceptable que el código totalmente cubierto tenga una clasificación de cobertura EMMA alta pero no del 100%? De ser así, ¿cómo funciona?

Respuesta

9

Su código implica un constructor por defecto, que no pueden ser adecuadamente etiquetados por Emma, ​​ya que, no tiene un bloque de texto.

Como no está etiquetada correctamente dentro del bloque de texto, Emma no puede asociar el registro de cobertura con el archivo de texto, y parece que algún código no está cubierto; porque, ejecutó un bytecode, pero el registro de línea no pudo registrarse. Más tarde, cuando el elemento informante lee el registro de línea, no pueden encontrar los números de línea para el constructor predeterminado, y resalta el error en el único lugar que tiene sentido, la línea de declaración de clase.

El constructor por defecto parece

public Arithmetic() { 
    super(); 
} 

Cuando el súper es la primera instrucción implícita que construirá Object. Si bien puede omitir su presencia, el compilador lo agregará por usted. Ahí es donde obtienes "3 líneas" en lugar de una.

+0

En realidad, tiene un "bloque de texto", simplemente está vacío. En bytecode, el constructor predeterminado está allí, en la línea marcada en rojo por EclEmma. Para cubrirlo y hacer que aparezca en verde, una prueba solo necesita llamar al constructor: 'new Arithmetic()'. Por supuesto, lo correcto aquí sería declarar un constructor predeterminado 'privado' en la clase. –

2

IIRC, necesita crear instancias de una instancia de la clase para ejercitar el lenguaje provisto por el constructor.

4

creo que usted necesitará para probar la creación de instancias de Arithmetic así, o declarar su constructor private para no permitir la instanciación

+1

Ah, probando que el constructor lo hace. EclEmma no está más feliz con un constructor privado, pero creo que recuerdo haber visto una solución para eso en alguna parte. – Pops

Cuestiones relacionadas