Есть ли эквивалент покрытия кода сонара для Scala?

17

Я пытаюсь настроить простые отчеты о покрытии кода для командного кодирования в смешанной Scala / Java прибл. соотношение 90/10 и столкновения с некоторыми серьезными препятствиями. Я ранее настраивал & amp; управляемый Sonar с большим успехом с командой только для Java, но, похоже, это не вариант.

Сонар с плагином Scala ошибочен и, похоже, поддерживает только проекты Scala, а не смешанные.

SCCT интегрируется с нашей сборкой maven, но не работает с ложноотрицательными результатами тестов.

Тайна была моей лучшей удачей; Он интегрирован с нашим maven build & amp; генерирует отчеты, но они не архивируются и не размещаются нигде, поскольку они были бы с Sonar. Там также нет центрального индекса, чтобы упростить навигацию по сгенерированным отчетам.

Я прочитал ответы здесь, в StackOverflow, но они в значительной степени относятся к 2010 году и свидетельствуют о том, что нет подходящего решения. Это изменилось?

Есть ли что-то очевидное, что мне не хватает?

    
задан warandpeace 13.09.2012 в 00:09
источник
  • Как будет работать Cobertura? В прошлый раз, когда я проверил, он был достаточно полезен, хотя и не был интегрирован с Sonar. –  ron 13.09.2012 в 07:56
  • @ron: Это следующий в моем списке. Мне удалось заставить Undercover написать отчеты в формате XML Cobertura, но поскольку фактический плагин Cobertura не запускался, Дженкинс отказывается признать, что отчеты о покрытии кода существуют. Я помню, что слышал что-то о том, что Cobertura не справляется со всеми классами Java, которые Scala может генерировать, но, я думаю, я узнаю. Будьте на связи! –  warandpeace 13.09.2012 в 22:46
  • @ron: Cobertura + Jenkins Cobertura Plugin работает достаточно хорошо. Точная и читаемая, показывает тенденции и позволяет мне развернуть. Это не совсем сонар, но он работает! –  warandpeace 14.09.2012 в 01:01

2 ответа

7

О стороне сонара:

  • да, Плагин Scala Sonar Plugin в настоящее время застопорился. Это было инициировано сообществом, но никто не предлагал его принять. Если есть какие-то добровольцы, мы будем рады помочь им и помочь им.

  • относительно поддержки нескольких языков внутри одного проекта, поддержка будет поступать в Sonar. Я не могу дать вам дорожную карту, но мы сейчас думаем о том, как добавить эту поддержку в Sonar в следующих выпусках, так что это краткосрочная проблема.

ответ дан Fabrice - SonarSource Team 13.09.2012 в 11:07
  • 4 года назад и до сих пор нет слова о поддержке Scala для Sonar. Последнее слово от Freddy Mallet было просто для подтверждения очевидного: groups.google.com/forum/#!topic/sonarqube/MkcW9tFG8UY –  RCross 21.10.2016 в 15:04
6

Вы можете использовать SCCT или JaCoCo .

  • SCCT: он поддерживает Scala до версии 2.10, но разработка, похоже, застопорилась около 9 месяцев. Он поддерживает Scala и работает как с Maven, так и с SBT.
  • JaCoCo находится под активным развитием. Он поддерживает любую версию Scala, но не изначально, а на уровне байт-кода. Таким образом, вы можете получить некоторые артефакты, например. некоторый код получает только частичный охват, потому что сгенерированный байт-код имеет некоторый теоретический кодовый путь JaCoCo (но который никогда не может быть выполнен из кода Scala).

JaCoCo может быть немного сложнее настроить с Maven и Scala. Вот несколько трюков:

  1. Используйте этот вариант с помощью пусковой установки агента. Не используйте вариант с байт-кодом предварительной обработки.
  2. При использовании JaCoCo с Maven: есть задача Maven ( jacoco: prepare-agent ), который будет вызывать правильное выражение для запуска агента и сохраняет его в собственность. Затем вы можете использовать это свойство в качестве параметра командной строки при запуске виртуальной машины Java.
  3. Параметрируйте средство запуска агента, чтобы несколько запусков (например, для запуска разных тестов) записывались в один и тот же файл журнала. Некоторые плагины IDE будут иметь проблемы с разбором такого файла, но плагин JaCoCo Hudson, например, отлично работает.
ответ дан stefan.schwetschke 30.08.2013 в 15:50
  • спасибо за ваши ответы, мне просто удалось получить SCCT для генерации сообщения cobertura и нашего плагина Jenkins cobertura, чтобы прочитать его. Однако SCCT включает все в свой охват кода. Я хотел бы иметь возможность исключить некоторые папки, как в JaCoCo. jacoco.excludes в jacoco.Config: = Seq («виды *», «Маршруты», «Контроллеры», «КонтроллерыReverse», «controllersjavascript», «controllerref») –  Roch 30.08.2013 в 16:19
  • Знаете ли вы, смогу ли я это сделать? –  Roch 30.08.2013 в 16:19
  • Лучше всего, чтобы опубликовать файл cobertura.xml. Вы можете сделать это легко с интеграцией maven Groovy (books.sonatype.com/mcookbook/reference/ch02s02.html). В качестве альтернативы вы можете изменить файл CoberturaReporter.scala (github.com/mtkopone/scct/blob/master/src/main/scala/reaktor/...) –  stefan.schwetschke 01.09.2013 в 16:01