2012-03-06 9 views
5

Estoy trabajando en un proyecto que consta de código .NET y proyectos Java de Android. Estamos intentando que ambos tipos de proyectos funcionen en un entorno TeamCity.Creación de proyectos de Android con TeamCity: pruebas y problemas de cobertura de código

Los proyectos .NET están siendo probados a través de algunos proyectos NUnit, y utilizamos DotCover para producir informes de cobertura y todo parece crecer. Ahora, los proyectos android/java se están construyendo usando corredores de hormigas, y tenemos algunos guiones de construcción tanto para la producción como para los proyectos de prueba, y el problema es, al parecer, la creación de informes de cobertura de Java.

Hemos creado un paso de generación con las siguientes tareas ant:

clean emma debug install test 

El paso de construcción se fija para tener "corredor Emma cobertura" activado (con la opción "Incluir archivos de origen de los datos de cobertura" comprobado).

Ocurre un error al ejecutar el paso de compilación, indicando lo siguiente en el fragmento de registro (se adjunta el archivo de registro completo). Otro problema importante es que las pruebas de la unidad android/java no aparecen en las estadísticas generales de la compilación.

Aquí está la snippit registro:

[16:37:52]: [aapt] Generating resource IDs... 
[16:37:55]: [subant] -pre-compile 
[16:37:55]: [subant] -compile (1s) 
[16:37:55]: [-compile] do-only-if-manifest-hasCode (1s) 
[16:37:55]: [do-only-if-manifest-hasCode] sequential (1s) 
[16:37:55]: [sequential] if (1s) 
[16:37:55]: [if] Adding debug=true parameter to javac task 
[16:37:55]: [if] javac 
[16:37:55]: [if] Compiling 1 source file to C:\BuildAgent\work\c588ac2d935670cb\MyAndroidProject\bin\classes 
[16:37:55]: [if] EMMA: Instrumenting classes 
[16:37:55]: [EMMA: Instrumenting classes] EMMA commandline: [-ix, -*Test*, -cp, C:\BuildAgent\work\c588ac2d935670cb\MyAndroidProject\bin\classes, -m, overwrite] 
[16:37:55]: [EMMA: Instrumenting classes] EMMA: processing instrumentation path ... 
[16:37:56]: [EMMA: Instrumenting classes] EMMA: instrumentation path processed in 265 ms 
[16:37:56]: [EMMA: Instrumenting classes] EMMA: [167 class(es) instrumented, 0 resource(s) copied] 
[16:37:56]: [EMMA: Instrumenting classes] EMMA: metadata merged into [C:\BuildAgent\work\c588ac2d935670cb\coverage.em] {in 15 ms} 
[16:37:56]: [if] if 
[16:37:56]: [if] echo 
[16:37:56]: [echo] Instrumenting classes from C:\BuildAgent\work\c588ac2d935670cb\MyAndroidProject\bin/classes... 
[16:37:56]: [if] emma 
[16:37:56]: [emma] com.vladium.emma.EMMARuntimeException: [OUT_IO_FAILURE] exception occurred while writing output file [C:\BuildAgent\work\c588ac2d935670cb\coverage.em]: 
[16:37:56]: [do-only-if-manifest-hasCode] The following error occurred while executing this line: C:\Android\android-sdk\tools\ant\build.xml:655: com.vladium.emma.EMMARuntimeException: [OUT_IO_FAILURE] exception occurred while writing output file [C:\BuildAgent\work\c588ac2d935670cb\coverage.em]: 
[16:37:56]: [subant] The following error occurred while executing this line: C:\Android\android-sdk\tools\ant\build.xml:602: The following error occurred while executing this line: C:\Android\android-sdk\tools\ant\build.xml:655: com.vladium.emma.EMMARuntimeException: [OUT_IO_FAILURE] exception occurred while writing output file [C:\BuildAgent\work\c588ac2d935670cb\coverage.em]: 
[16:37:56]: [Step 1/18] EMMA: Create Report (4s) 
[16:38:00]: [EMMA: Create Report] Unable to find C:\BuildAgent\work\c588ac2d935670cb\coverage.ec, cannot create EMMA report 
[16:38:00]: [Step 1/18] Process exited with code 1 
[16:38:00]: [Step 1/18] Ant output: 
[16:38:00]: [Step 1/18] at java.lang.reflect.Method.invoke(Method.java:601) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Task.perform(Task.java:348) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) 
[16:38:00]: [Step 1/18] at com.android.ant.IfElseTask.execute(IfElseTask.java:120) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
[16:38:00]: [Step 1/18] at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) 
[16:38:00]: [Step 1/18] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[16:38:00]: [Step 1/18] at java.lang.reflect.Method.invoke(Method.java:601) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Task.perform(Task.java:348) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Target.execute(Target.java:390) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Target.performTasks(Target.java:411) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Project.executeTarget(Project.java:1368) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Project.executeTargets(Project.java:1251) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Main.runBuild(Main.java:809) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Main.startAnt(Main.java:217) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
[16:38:00]: [Step 1/18] Caused by: java.io.IOException: cannot merge new data into [C:\BuildAgent\work\c588ac2d935670cb\coverage.em]: created by another EMMA version [0.0.0] 
[16:38:00]: [Step 1/18] at com.vladium.emma.data.DataFactory.persist(DataFactory.java:593) 
[16:38:00]: [Step 1/18] at com.vladium.emma.data.DataFactory.persist(DataFactory.java:71) 
[16:38:00]: [Step 1/18] at com.vladium.emma.instr.InstrProcessorST._run(InstrProcessorST.java:753) 
[16:38:00]: [Step 1/18] ... 71 more 
[16:38:00]: [Step 1/18] Total time: 6 seconds 
[16:38:00]: [Step 1/18] Publishing artifacts 
[16:38:00]: [Publishing artifacts] Paths to publish: [C:\BuildAgent\work\c588ac2d935670cb\coverage.ec, C:\BuildAgent\work\c588ac2d935670cb\coverage.em, C:\BuildAgent\work\c588ac2d935670cb\coverage.txt, C:\BuildAgent\work\c588ac2d935670cb\coverage\coverage.zip] 
[16:38:00]: [Publishing artifacts] Artifacts path coverage.ec not found 
[16:38:00]: [Publishing artifacts] Artifacts path coverage.txt not found 
[16:38:00]: [Publishing artifacts] Artifacts path coverage/coverage.zip not found 
[16:38:00]: [Publishing artifacts] Sending files 
[16:38:00]: [Step 1/18] Failed to extract Emma coverage statistics from the coverage.txt, due to error: java.io.FileNotFoundException: C:\BuildAgent\work\c588ac2d935670cb\coverage.txt (The system cannot find the file specified) 
[16:38:00]: [Step 1/18] Step Test Smart Client - Unit tests (Ant) failed 

¿Alguien tiene una idea de lo que podría ser el problema?

Por cierto, cuando ejecuto los objetivos directamente desde una línea de comandos, los informes se crean sin ningún problema.

Saludos, Por

Respuesta

6

La versión EMMA utilizado por el SDK de Android es mayor que el utilizado por el plugin Sonar EMMA.

Parece que la manera en que se codifica la cobertura del código cambia entre las versiones, por eso Sonar no puede reconocer el formato.

Afortunadamente, a alguien se le ocurrió un transcodificador. El problema se describe con más detalle aquí: http://jira.codehaus.org/browse/SONARPLUGINS-1356

El código java para el transcodificador antes mencionado también se puede descargar desde allí.

Solo tiene que transcodificar todos los archivos .em y .ec antes de ejecutar Sonar en ellos y debería leerlos bien - probado y probado.

+0

¡Has sido fantásticamente útil hoy! – Argyle

+2

Ya fue bastante difícil de descifrar, no quiero que nadie más comparta mi destino :) – Rosomack

+0

Impresionante, esto fue muy útil y funcionó a la perfección: copié EmmaTranscoder.class en el mismo directorio que los archivos de cobertura y ejecuté 'java -cp. Cobertura de EmmaTranscoder. [Ec | em] ' – friederbluemle

Cuestiones relacionadas