Cobertura de Jacoco para la declaración de switch
Estoy trabajando para obtener una cobertura de código del 100% para una biblioteca en la que estoy trabajando y parece que tengo algunos problemas con una declaración de conmutación y la cobertura que simplemente no entiendo.
Actualmente estoy utilizando Jacoco 0.7.2 porque cada nueva versión parece romper con Robolectrics.
- ¿Puede utilizar declaraciones condicionales en el caso de conmutación en Android?
- ¿Cómo puedo agregar tercer estado en Android Switch?
- Obteniendo la instancia Switch dentro de ActionBar
- Un problema Java de conmutación: las expresiones de caso deben ser expresiones constantes
- Ocultar texto predeterminado para el botón de Android
Pruebo una sentencia switch simple:
public enum Type { NONE, LEGACY, AKS } private static Class<?> getCipherClass(Type type) { switch (type) { case LEGACY: return CipherWrapperLegacy.class; case AKS: return CipherWrapperAks.class; default: return null; } }
La prueba que escribí contiene las siguientes comprobaciones (tengo que usar la reflexión como el método es privado):
final CipherWrapper instance = CipherWrapper.createInstance(mockContext, CipherWrapper.Type.LEGACY, ALIAS); assertNotNull(instance); Method getCipherMethod = TestUtils.makeMethodAccessible(CipherWrapper.class, "getCipherClass", CipherWrapper.Type.class); assertNull(getCipherMethod.invoke(instance, CipherWrapper.Type.NONE)); assertEquals(CipherWrapperAks.class, getCipherMethod.invoke(instance, CipherWrapper.Type.AKS)); assertEquals(CipherWrapperLegacy.class, getCipherMethod.invoke(instance, CipherWrapper.Type.LEGACY));
El resultado no es lo que esperaba:
La imagen es un poco confusa como la línea amarilla sugiere que hay algo que falta. El icono verde me dice que 3 de 3 ramas están cubiertas.
También he probado para extender la caja del interruptor con el case NONE
y una caída a través pero no cambió nada.
Lo único que puedo hacer es reemplazar el conmutador por if / else y luego obtener 100% de cobertura.
Actualmente tengo el 98% de cobertura pero no se me pasa nada sobre la base de la visión general:
- Cómo cambiar el color de entrada del imput en xml?
- Cambiar instrucción con cadena como argumento en Android
- Cómo cambiar la altura y el ancho de Switch en Android
- Android: cambia a la actividad sin reiniciarla
- Cómo cambiar entre la cámara delantera y trasera cuando se utiliza MediaRecorder android
- Botones onClick del interruptor
- Cambiar las actividades de un lado a otro en Android
- ¿Reutilizar las actividades anteriores?
Si el método invoke no le gusta poner una variable anónima:
getCipherMethod.invoke(instance, (CipherWrapper.Type) null);
A continuación, intente con una variable con nombre:
CipherWrapper.Type nullType = null; getCipherMethod.invoke(instance, nullType);
Además, debe comprobar si la excepción de invocación es sólo la envoltura de una excepción causada por invocar el método en lugar de un error con la invocación en sí.
- Problema de compilación de Gradle: actualización de Quickblox y httpclient en el último SDK23 de Android
- Problemas con la configuración de clase MediaRecorder fuente de audio – setAudioSource () – parámetro no compatible