Difference between revisions of "Sonar + maven principle"

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.  
 +
 
 +
== 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 ?
  
  

Revision as of 11:03, 10 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 ?


... In our example:

  • 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.


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)
  • Maven jacoco dependency


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