with values recorrer que enum diagrama clases clase java eclipse code-coverage emma

values - que es un enum en java



Cobertura de Emma en los tipos de Enum (3)

Estoy de acuerdo con otros carteles en que la cobertura del código al 100% puede ser errónea. Pero debo admitir la satisfacción de obtener una cobertura del 100% en el código del núcleo recién escrito.

Afortunadamente, dado que todas las enumeraciones se extienden en la misma "clase", puedes lograr tu 100% con un poco de ayuda de la reflexión de tu amigo.

Simplemente agregue el siguiente método estático en una clase para que sus probadores llamen, usando [EnumTypeName] .class como parámetro.

public static void superficialEnumCodeCoverage(Class<? extends Enum<?>> enumClass) { try { for (Object o : (Object[])enumClass.getMethod("values").invoke(null)) { enumClass.getMethod("valueOf", String.class).invoke(null, o.toString()); } } catch (Throwable e) { throw new RuntimeException(e); } }

Suponiendo que esta función estática se implementó en una clase llamada "Compartida", solo tendría que incluir esta línea para cada enumeración:

Shared.superficialEnumCodeCoverage(UserRole.class);

La palabra clave es ''superficial''.

Estoy ejecutando EclEmma, ​​el complemento de Emma para Eclipse, y el informe de cobertura muestra solo una cobertura parcial para un Enum que he definido, a pesar de que muestra el único valor en el Enum como cubierto. Supongo que hay una brecha de cobertura para los métodos implícitos que respaldan el Enum, pero no estoy muy seguro.

Por ejemplo, con este Enum, EclEmma resalta todo en verde, excepto la declaración del paquete:

package com.blah; public enum UserRole { HAS_ACCESS }

Si saco los detalles de cobertura para la clase, veo esto:

Mi pregunta es, ¿cuál es la mejor manera de obtener una cobertura del 100% en mis clases de Enum utilizando EclEmma?


Lo que estás viendo es un código de byte oculto que se genera debido a una enumeración.

Para deshacerse de este problema, agregue una llamada a los métodos de valores () y valueOf () en la enumeración, como lo mencionaron anteriormente Carl Manaster y Peter Lawrey.


Nos encontramos con un problema similar en el que el compilador generaba métodos en las enumeraciones, como los valores (), que normalmente no se llamaban en nuestro código de prueba. Resolvimos el problema filtrando los números de nuestros objetos de enumeración de nuestro informe final.

Es por esto que no me gusta usar la cobertura de código como una medida de integridad. Cuando piense en una mejor métrica, te lo haré saber. :)