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.

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:

Resultado de cobertura de código Jacoco

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: Cobertura general Jacoco

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í.

  • If-else trabajando, no cambie
  • ¿O declaración en el interruptor / caso?
  • Interruptor multinivel Android
  • Cambiar del diseño main.xml a otro diseño
  • Widget de conmutador vertical Android
  • Android: El botón OnClickListener no funciona
  • Cómo cambiar entre actividades con viewflipper
  • ¿Cómo iniciar una actividad diferente usando la caja de conmutación en el elemento de menú?
  • Menú emergente personalizado de Android con conmutador
  • Solicitud de switch / case con boolean
  • ¿Usando cuerdas en una caja de conmutación para un menú?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.