2012-09-12 8 views
17

Sto provando a impostare semplici report di copertura del codice per una codifica di gruppo in Scala/Java misto a ca. un rapporto di 90/10 e si imbattono in alcuni blocchi stradali seri. In precedenza ho configurato & Sonar amministrato con grande successo con un team solo Java, ma non sembra essere un'opzione.Esiste un equivalente di copertura del codice a livello di sonar per Scala?

Il plug-in Sonar con Scala è buggato e sembra supportare solo progetti Scala, non misti.

SCCT si integra con la nostra build di maven, ma fallisce ripetutamente con errori di test falsi negativi.

Undercover è stata la mia migliore fortuna finora; È integrato con la nostra build Maven & genera report, ma non vengono archiviati o ospitati ovunque come con Sonar. Sembra inoltre che non ci sia un indice centrale per semplificare la navigazione nei report generati.

Ho letto le risposte qui su StackOverflow, ma risalgono in gran parte al 2010 e suggeriscono che non è disponibile una soluzione decente. È cambiato?

C'è qualcosa di ovvio che mi manca?

+1

Come funziona Cobertura? L'ultima volta che ho controllato era abbastanza utilizzabile, anche se non integrato con Sonar. – ron

+0

@ron: Quello è il prossimo sulla mia lista. Sono riuscito a convincere Undercover a scrivere le relazioni nel formato XML di Cobertura, ma dal momento che l'attuale plug-in Cobertura non è stato eseguito, Jenkins si rifiuta di riconoscere che esistono rapporti sulla copertura del codice. Mi ricordo di aver sentito qualcosa su Cobertura che non si comporta bene con tutte le classi Java che Scala può generare, ma credo che lo scoprirò. Rimanete sintonizzati! – warandpeace

+1

@ron: Cobertura + Jenkins Plugin Cobertura funziona abbastanza bene. Accurato e leggibile, mostra le tendenze e mi consente di approfondire. Non è proprio Sonar, ma funziona! – warandpeace

risposta

7

Circa lato Sonar:

  • sì, lo sviluppo Scala Sonar Plugin è attualmente in fase di stallo. È stato avviato dalla comunità, ma nessuno si è offerto di prenderlo ancora. Se ci sono alcuni volontari, saremo lieti di guidarli e aiutarli.

  • in merito al supporto di più lingue all'interno di un singolo progetto, il supporto verrà fornito in Sonar. Non posso darti una roadmap per questo, ma al momento stiamo pensando a come aggiungere questo supporto in Sonar nelle prossime versioni, quindi questo è un problema a breve termine.

+0

4 anni e ancora nessuna parola sul supporto di Scala per Sonar. L'ultima parola di Freddy Mallet è stata semplicemente quella di confermare l'ovvio: https://groups.google.com/forum/#!topic/sonarqube/MkcW9tFG8UY – RCross

6

È possibile utilizzare SCCT o JaCoCo.

  • SCCT: Supporta Scala fino alla versione 2.10, ma lo sviluppo sembra essere bloccato per circa 9 mesi. Supporta Scala in modo nativo e funziona con entrambi, Maven e SBT.
  • JaCoCo è in sviluppo scivo. Supporta qualsiasi versione di Scala, ma non in modo nativo, ma a livello di bytecode. Quindi potresti ottenere alcuni artefatti, ad es. qualche codice ottiene solo coveragege parziale, perché il codice byte generato ha un percorso di codice teorico che JaCoCo vede (ma che non può mai essere eseguito dal codice Scala).

JaCoCo può essere un po 'complicato da configurare con Maven e Scala. Ecco alcuni trucchi:

  1. Utilizzare la variante con il programma di avvio agente. Non utilizzare la variante con il codice byte di preelaborazione.
  2. Quando si utilizza JaCoCo con Maven: Esiste un'attività Maven (jacoco:prepare-agent) che produce l'espressione corretta per il programma di avvio dell'agente e la archivia in una proprietà. È quindi possibile utilizzare questa proprietà come parametro della riga di comando durante l'esecuzione della Java virtual machine.
  3. Parametrizzare l'agente di avvio, in modo che più lanci (ad esempio per l'esecuzione di test diversi) scrivano nello stesso file di registro. Alcuni plug-in IDE avranno problemi con l'analisi di tale file, ma il plugin JaCoCo Hudson, ad esempio, funziona bene.
+1

grazie per le vostre risposte, sono appena riuscito a ottenere da SCCT un report di cobertura e noi Jenkins plugin di cobertura per leggerlo. Tuttavia SCCT include tutto nella sua copertura di codice. Mi piacerebbe essere in grado di escludere alcune cartelle come in JaCoCo. jacoco.excludes in jacoco.Config: = Seq ("views *", "* Routes *", "controller * routes *", "controller * Reverse *", "controller * javascript *", "controller * ref *") , – Roch

+0

Sai se posso farlo? – Roch

+0

La soluzione migliore potrebbe essere quella di elaborare il file cobertura.xml. Puoi farlo facilmente con l'integrazione di maven Groovy (http://books.sonatype.com/mcookbook/reference/ch02s02.html). In alternativa puoi modificare il file CoberturaReporter.scala (https://github.com/mtkopone/scct/blob/master/src/main/scala/reaktor/scct/report/CoberturaReporter.scala) –

Problemi correlati