Difference between revisions of "Sonar + maven principle"

 
(One intermediate revision by the same user not shown)
Line 28: Line 28:
  
 
Definition:
 
Definition:
* '''Unit Tests coverage (UT)''' = code coverage for each module only. == How much tests of 'module A' test 'module A' ??
+
* '''Unit Tests coverage (UT)'''  
* '''Integration Tests coverage (IT)''' = overall code coverage. == Once global compilation and all the tests have been run, how much of 'module A' was used and covered ?
 
  
 +
= code coverage for each module only.
  
... In our example:
+
== How much tests of 'module A' test 'module A' ??
* For "Module A" only the jUnit in "Module A" are computed in ''unit test coverage''
 
* The coverage provided by the Module C "tests" is NOT taken into account by default! You need to enable and configure the ''integration test coverage''.
 
  
  
... Why ?!?
+
 
This limitation comes from the default SONAR behaviour. By default it creates 1 coverage report per component (maven project). To get the overall coverage you need a common report that each project can improve and use.
+
* '''Integration Tests coverage (IT)'''
 +
 +
= overall code coverage.  
 +
 
 +
== Once global compilation and all the tests have been run, how much of 'module A' was used and covered ?
  
  
Line 50: Line 52:
 
** Maven-surefire (unit tests reports)
 
** Maven-surefire (unit tests reports)
 
** Maven-failsafe (integration tests reports)
 
** Maven-failsafe (integration tests reports)
* Maven jacoco dependency
 
  
  

Latest revision as of 11:59, 12 April 2019


SonarQube requires quite some configuration to be fully useful!

This article explains the key principles + what is UNIT and INTEGRATION tests from my point of view.


Principle

What are Unit / Integration tests ?

By default "code coverage" only consider the tests from the same projects.


Let's take an example to make things easier...

Consider a project with 4 modules such as:

Project structure


Then consider the following inter-dependencies:

Project inter-dependencies


Definition:

  • Unit Tests coverage (UT)

= code coverage for each module only.

== How much tests of 'module A' test 'module A' ??


  • Integration Tests coverage (IT)

= overall code coverage.

== Once global compilation and all the tests have been run, how much of 'module A' was used and covered ?


Process overview

To work well SonarQube requires a bit of Maven configuration + Jenkins build adjustment:

  • Maven specific properties
  • Maven build plug-ins
    • Maven-jacoco (code coverage tool)
    • Maven-surefire (unit tests reports)
    • Maven-failsafe (integration tests reports)


Key points:

  • SONAR is configured for JAVA language and it will use Jacoco as coverage tool.
  • Each Maven module will have its own Unit Tests results (Surefire reports + .exec file) inside its own target directory
  • The Integration Tests results are common. Meaning:
    • all modules will write in the same directory
    • That directory is relative to the maven execution
    • All reports will be aggregated