The time metric doesnt really add up. It seems the scanner calculates the time spent on testing is just adding the time of the cases, not considering they run in parallel. In this example the pipe step takes 4min and also the root object time seems correct, but sonar says it is 15min. the numbers only make sense when adding the times of the cases, which run in parallel
<testsuite name="TestSuite" time="155.149" tests="47" errors="0" skipped="0" failures="11">
<testcase name=" id:pathToStringTxtPayloadContainer " classname="io.testifi.util.file.FileUtilTestAppRegression" time="15.334"/>
<testcase name=" id:searchFileNotFound " classname="io.testifi.util.file.FileUtilTestAppRegression" time="59.508"/>
<testcase name=" id:createNewFile fileName::"[fileTest3.txt]" expectedException2::"[AssertionError]" mock::"[File.setWritable]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="12.391"/>
<testcase name=" id:pathToStringTxtSpecial fileName::"[fileNameWithPlus+.txt]" fileContentToCheck::"[Test me! with +]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="7.204"/>
<testcase name=" id:pathToStringTxtSpecial fileName::"[fileNameWithDot..txt]" fileContentToCheck::"[Test me! with .]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="12.181"/>
<testcase name=" id:findFilesInSubDirectoryTooWithMultiplePattern " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.767"/>
<testcase name=" id:findFilesNoPattern " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.739"/>
<testcase name=" id:findFilesInSubDirectoryTooNoPattern " classname="io.testifi.util.file.FileUtilTestAppRegression" time="11.603"/>
<testcase name=" id:createNewFile fileName::"[fileTest.txt]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="12.623"/>
<testcase name=" id:streamToString " classname="io.testifi.util.file.FileUtilTestAppRegression" time="10.799"/>
<testcase name=" id:createNewFile mockException::"[]" fileName::"[fileTest3.txt]" expectedException2::"[AssertionError]" mock::"[File.setWritable]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="12.632"/>
<testcase name=" id:findFilesNoFiles " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.477"/>
<testcase name=" id:pathToStringTxtSpecial fileName::"[fileNameWithPercentage%.txt]" fileContentToCheck::"[Test me! with %]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.423"/>
<testcase name=" id:pathToStringTxtSpecial fileName::"[fileNameWithSemicolon;.txt]" fileContentToCheck::"[Test me! with ;]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.446"/>
<testcase name=" id:provideFileJar " classname="io.testifi.util.file.FileUtilTestAppRegression" time="21.092"/>
<testcase name=" id:provideFileJare " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.733"/>
<testcase name=" id:pathToStringTxtSpecial fileName::"[fileNameWithAnd&.txt]" fileContentToCheck::"[Test me! with &]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="12.484"/>
<testcase name=" id:streamsToZipTwoStreams " classname="io.testifi.util.file.FileUtilTestAppRegression" time="8.589"/>
<testcase name=" id:fileToString " classname="io.testifi.util.file.FileUtilTestAppRegression" time="11.306"/>
<testcase name=" id:pathToStringTxtMultipleLines " classname="io.testifi.util.file.FileUtilTestAppRegression" time="13.926"/>
<testcase name=" id:createNewFile fileName::"[fileTest4.txt]" expectedException2::"[FileNotFoundException]" mock::"[File.mkdirs]" expectedException::"[IOError]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="11.431"/>
<testcase name=" id:findFilesInvalidFile " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.012"/>
<testcase name=" id:pathToStringTxtSpecial fileName::"[fileNameWithComma,.txt]" fileContentToCheck::"[Test me! with ,]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="12.081"/>
<testcase name=" id:createNewFile fileName::"[fileTest5.txt]" expectedException2::"[FileNotFoundException]" mock::"[File.createNewFile]" expectedException::"[IOError]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="13.034"/>
<testcase name=" id:findFilesWithPattern " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.726"/>
<testcase name=" id:pathToStringTxtSpecial fileName::"[fileNameWithSharp#.txt]" fileContentToCheck::"[Test me! with #]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.742"/>
<testcase name=" id:streamsToZip " classname="io.testifi.util.file.FileUtilTestAppRegression" time="10.502"/>
<testcase name=" id:findFilesInSubDirectoryTooWithPattern " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.529"/>
<testcase name=" id:createNewFileAndChangeContent " classname="io.testifi.util.file.FileUtilTestAppRegression" time="11.369"/>
<testcase name=" id:pathToStringTxtSpecial fileName::"[fileNameWithDollar$.txt]" fileContentToCheck::"[Test me! with $]" " classname="io.testifi.util.file.FileUtilTestAppRegression" time="13.017"/>
<testcase name=" id:pathToStringTxt " classname="io.testifi.util.file.FileUtilTestAppRegression" time="14.105"/>
<testcase name=" id:pathToStringZip " classname="io.testifi.util.file.FileUtilTestAppRegression" time="20.516"/>
<testcase name=" id:searchFileLicence " classname="io.testifi.util.file.FileUtilTestAppRegression" time="10.955"/>