tutorial software pruebas español coverage code android unit-testing robolectric powermock cobertura

android - software - ¿Puedo usar Cobertura en pruebas unitarias con PowerMock?



code coverage (1)

En este momento, Android Studio integra jacoco automáticamente para hacer cobertura de código.

Solo necesitas agregar algunas líneas de código:

apply plugin: ''jacoco-android''

android { buildTypes { debug { testCoverageEnabled = true } } }

Más información aquí:

Problema

Estoy configurando la cobertura del código de prueba unitaria para una biblioteca de Android que utiliza Robolectric para ejecutar las pruebas y PowerMock / Mockito para realizar pruebas simuladas.

Sin embargo, la ejecución de pruebas unitarias con Cobertura da como resultado la siguiente Excepción ...

:example:testDebugUnitTest Exception in thread "Thread-5" java.lang.ExceptionInInitializerError at com.example.package.saas.Query$RemoveWordsType.__cobertura_init(Query.java) at com.example.package.saas.Query$RemoveWordsType.<clinit>(Query.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesToSingleClassOnProjectData(TouchCollector.java:123) at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:110) at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:272) at net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:33) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalStateException: Shutdown in progress at java.lang.ApplicationShutdownHooks.add(ApplicationShutdownHooks.java:66) at java.lang.Runtime.addShutdownHook(Runtime.java:211) at net.sourceforge.cobertura.coveragedata.ProjectData.initialize(ProjectData.java:239) at net.sourceforge.cobertura.coveragedata.ProjectData.getGlobalProjectData(ProjectData.java:209) at net.sourceforge.cobertura.coveragedata.TouchCollector.<clinit>(TouchCollector.java:45) ... 11 more

... y el informe Cobertura generado no muestra ninguna cobertura.

Al ejecutar el mismo testcase sin PowerMock *, las pruebas se ejecutan bien y el informe de cobertura se genera con éxito:

* Es decir, comentar las pruebas con PowerMock, eliminar la anotación de PowerMockIgnore , la PowerMockRule y la MockitoAnnotations.initMocks(this); invocación.

Investigación

Pregunta

¿Es posible utilizar Cobertura junto con PowerMock?

  • En ese caso, ¿qué me falta?
  • De lo contrario, ¿cómo debo medir la cobertura del código con una configuración de este tipo (Android Library + Robolectric + PowerMock)?