2012-03-06 2 views
5

Я работаю над проектом, состоящим из проектов .NET и Android. Мы пытаемся задействовать оба типа проектов в одной среде TeamCity.Создание андроидных проектов с TeamCity - проблемы с тестированием и кодом покрытия

Проекты .NET проходят тестирование через некоторые проекты NUnit, и мы используем DotCover для создания отчетов о покрытии, и все кажется набухающим. Теперь проекты android/java строятся с использованием муравьев-бегунов, и у нас есть некоторые сценарии сборки как для производства, так и для тестовых проектов, и проблема заключается в создании отчетов о покрытии java.

Мы создали шаг сборки со следующими целями Ant:

clean emma debug install test 

Этапом сборки устанавливаются так, чтобы «Эмма бегуна покрытия» включена (с опцией «Включить исходные файлы в данном покрытии» проверено).

При запуске этапа сборки возникает ошибка, указывающая следующее в отрывке журнала (полный файл журнала прилагается). Еще одна важная проблема заключается в том, что модульные тесты android/java не отображаются в общей статистике сборки.

Вот журнал Snippit:

[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 

Кто-нибудь есть идея, что проблема может быть?

Кстати, когда я запускаю цели непосредственно из командной строки, отчеты создаются без каких-либо проблем.

С уважением, Per

ответ

6

версия EMMA используется Android SDK старше, чем используемый плагином Sonar EMMA.

Кажется, что кодировка кода кодируется между версиями, поэтому Sonar не может распознать формат.

К счастью, кто-то придумал транскодер. Вопрос более подробно описан здесь: http://jira.codehaus.org/browse/SONARPLUGINS-1356

Код java для вышеупомянутого транскодера также можно загрузить оттуда.

Вам просто нужно перекодировать все файлы .em и .ec перед запуском Sonar, и они должны прочитать их в порядке - проверены и проверены.

+0

Вы были фантастически полезны сегодня! – Argyle

+2

Это было трудно понять, я не хочу, чтобы кто-то другой делился моей судьбой :) – Rosomack

+0

Удивительно, это было очень полезно и отлично работало: я скопировал EmmaTranscoder.class в тот же каталог, что и файлы покрытия, и выполнил 'java -cp. Распространение EmmaTranscoder. [Ec | em] ' – friederbluemle

Смежные вопросы