LOC counting for unit tests files
Unit tests files are not counted as LOC for the license, if they are appropriately identified as such.
With some build tools and the corresponding scanner (Scanner for Maven, Gradle, .Net) it’s generally not needed to explicitly identify test files as this is automatically deducted by the scanner.
With the SonarScanner for CLI (aka
sonar-scanner), this has to be explicit, and you have to set the
sonar.tests property to point at directories containing those test files… otherwise they will be considered regular source code and counted at LOC
In other words, you must set the
sonar.tests property to explicitly point at directories containing unit tests, for them not to be counted as LOC.
By default (ie if you don’t specify otherwise) all XML files that are located in the directories pointed by the
sonar.sources property (whose default is
. meaning anything under the project root directory), is considered source code and therefore counted as LOC.
XML (and other) files counted as LOC… or not
Some XML files may be legitimate source code and you may want to analyze them as such.
In the latter case you should exclude these files, 1) to not consume LOC and 2) to not analyze files that will produce junk reports (issues, bad metrics) in SonarQube.
To exclude these files:
- This is typically automatic when using the Scanner for Maven, For Gradle or for .Net (because these scanners are aware of what is truly source code and what is not)
- For the Scanner for CLI (
sonar-scanner) this exclusion has to be explicit (just like explicitly pointing at tests above)
– First you may set
sonar.sources to a comma separated list of directories that exclude directories where you have these “temporary” or “unwanted” files. This is the most convenient way if the source files are XML (and the rest) unwanted files are not in the same directories
– If the true source files and unwanted XML files are in the same directories you would have to set a 2nd property, called
sonar.exclusions that will ignore unwanted (XML or otehr) files, even if they are in the same diretories as sources. For instance:
# Example 1: Pick all source files in the root directory...
# ... and the below exclusion will exclude all XML and JSON files anywhere under the . directory
# Example 2: Sources to analyze are only searched in the src directory, tests are searched in the tests diretory
# ...and the below will exclude, from this src directory, all files (XML or other) that have temp in the file name,
# or that are in a temp directory anywhere in the source tree,
# and all the minified JS files (assumed to follow the pattern <file>.min.js)
sonar.exclusions = **/*temp*, **/temp/**/*, **/*min.js
For more on tests and exclusions see: