2015-01-13 10 views
7

Ich verwende PowerMockito und @PrepareForTest Annotation für meine Testklasse. Wenn ich das tue, sagt Sonar, dass keiner der Zweige abgedeckt wurde. Meine anderen Testklassen, die PowerMockito nicht verwenden, funktionieren jedoch gut. Zum Beispiel:PowerMockito deaktiviert Sonar-Zweigabdeckung

@RunWith(PowerMockRunner.class) 
@PrepareForTest({ MyClass.class }) 
public class MyClassTest { 
    //create some mocks and run some tests here 
} 

Gibt es jemanden mit dem gleichen Problem begegnet?

Vielen Dank im Voraus.

+0

Wie werden Sie Sie Code für die Berichterstattung instrumentieren? Offline-Instrumentierung, Online-Instrumentierung? Wahrscheinlich erstellt PowerMockito Bytecode ohne Coverage-Anweisungen. Welches Coverage-Tool verwenden Sie? – Grzesuav

+0

Ich hatte auch das selbe Problem und jetzt habe ich noch keine Lösung dazu. Ich denke, das ist schon lange da und es muss bald angesprochen werden. – Akshay

Antwort

6

Es gibt ein bekanntes Problem mit PowerMockito und Sonar Code Coverage Berechnung, und ich habe eine große Forschung dazu - seit heute gibt es keine Lösung zu beheben. Wie ich persönlich damit umgehe - versuche die Verwendung von PowerMockito zu vermeiden - benutze also statisch und final sparsam, was generell ein guter Rat ist, objektorientierten Code zu haben. Es wird jedoch immer noch einige Fälle geben, in denen Sie statische und/oder finale verwenden müssen. Für diese vergleichen meine Antwort hier: cobertura-showing-proper-coverage-but-in-sonar-many-files-showing-0-coverage

1
  1. Add cobertura plugin zu Ihrem Sonar-Server
  2. Verwenden Sie die maven cobertura plugin in Build (Ich gehe davon aus, dass die Build-Maven verwendet)
  3. -Feed in cobertura und Sonarbezogenen Eigenschaften benötigt für die Berichterstattung an Ihren Sonar-Server. Beispiel wie gezeigt.

    <sonar.java.coveragePlugin>cobertura</sonar.java.coveragePlugin> 
    <sonar.host.url>http://localhost:9500</sonar.host.url>  
    <sonar.sources>${project.build.sourceDirectory}</sonar.sources> 
    <sonar.junit.reportsPath>${project.build.directory}/surefire-reports</sonar.junit.reportsPath> 
    <sonar.cobertura.reportPath>${project.build.directory}/site/cobertura/coverage.xml</sonar.cobertura.reportPath> 
    
  4. Run Maven Ziel für Sonar heißt mvn Sonar installieren: Sonar