Покрытие Jacoco Unit and Integration Tests - индивидуальное и общее [закрыто]

У меня есть проект (ProjectA), который содержит несколько юнит-тестов и интеграционных тестов.

Ниже приводится структура.

ProjectA - src / java (исходный код Java)

- test / java (юнит-тесты Junit)

- test / resources (ресурсы, необходимые для юнит-тестов Junit)

- src / java-test (интеграционные тесты)

- conf (содержит XML-файлы, необходимые для сборки / тестирования / компиляции)

Я запускаю следующие команды - Все они работают, но у меня есть сомнения в том, как конфигурации, которые у меня есть в файлах build.gradle / GRADLE_HOME / init.d / *. Gradle, влияют на то, что я 'Я получаю.

Кажется, яЯ что-то упускаю и не получаю, где я хочу, что

Команды:

- gradle чистой сборки - работает нормально

Gradle чистой сборки JacocoTestReport - он работает нормально.

- gradle clean buildgrationTest jacocoTestReport - он работает нормально (если у меня запущен экземпляр tomcat и запущен в другом окне замазки для того же ProjectA).

После 3-й операции пули я вижу дополнительную папку "строить» и его подпапки (кроме того, что 's извлечены из источника / контроля версий) в моей рабочей области Jenkins рабочих мест.

то есть под - JenkinsWorkspace /

Build-

классы (содержит файлы .class для следующих, которые упоминаются как один из раздела sourceSets)

---- интеграцияТест

---- главный

---- тестовое задание-



Ресурсы (это содержит все файлы .properties / .xml, которые были в разделе "конф» папка в системе контроля версий.



отчеты (содержит файлы .xml / .html для PMD / CheckStyle / Findbugs и результаты тестов для модульных или ИТ-тестов, но НЕ для обоих). ---- контрольный стиль

---- findbugs

---- вечера

---- Якоко

---- тесты (Заметкаэто множественное число, т.е.нетестовое задание" который определяется как одна запись в sourceSets) -



jacoco (Это содержит 2 .exec-файла, т.е. i.e. test.exec иgrationTest.exec имеют разный размер файла)

---- test.exec

---- IntegrationTest.exec-



jacocoHtml (Эта папка содержит много папок (содержащих файлы .html) и в основном "index.html» под ним.

---- Somexxxfolders

---- ---- Somexxfolder 'файлы s.html

---- index.html

---- другие etc файлы / папки-



результаты теста (Он содержит некоторые XML-файлы, НО только для юнит-тестов или интеграционных тестов - ноне для обоих типов испытаний в данный момент).



т.е. если я бегуGradle чистой сборки ", затем вы'Посмотрю XML-файлы, связанные с модульным тестом, и если я запустлю "Gradle Clean Build Integration », затем XML-файлы модульного теста перезаписываются, и я вижу, что XML-файлы относятся только к / генерируются задачей интеграции.



Ниже приведен один из самых распространенных вариантов (файл GRADLE_HOME / init.d / some.common.gradle)

//
//Extra file can hold global Gradle settings so that these dont have to be inserted in project
//specific build.gradle file.
//Filename: extraN.common.gradle
allprojects {
   apply plugin: 'java'
   apply plugin: 'pmd'
   apply plugin: 'findbugs'
   apply plugin: 'checkstyle'
   apply plugin: 'jacoco'
   apply plugin: 'sonar-runner'
   tasks.withType(Compile) {
     options.debug = true
     options.compilerArgs = ["-g"]
   }
   sourceSets {
      main {
         java {
            // MOTE: If your project's build.gradle specify the sourceSet section, the following
            // values will be overwritten by what project's build.gradle will set.
            //
            // If you project's sourceSet structure if different in each project, then in this
            // global common .gradle file, you can define srcDir for main or other sections like
            // test, integrationTest etc as shown below -- commented out. If that's the case, 
            // then uncomment the below line and comment out using // -- srcDir 'src/java' line
            // for sourceSets.main.java section. This rule applies to other sections as well.
            // srcDir 'no_src_dir_set_yet'

            srcDir 'src/java'
         }
         resources {
            srcDir 'conf'
         }
      }
      test {
         java {
            srcDir 'test/java'
         }
         resources {
            srcDir 'test/resources'
            srcDir 'conf'
         }
      }
      integrationTest {
         java {
            srcDir 'src/java-test'
         }
         resources {
            srcDir 'conf'
         }
      }
   }
   def sonarServerUrl = "dev.sandbox.server.com"
   sonarRunner {
      sonarProperties {
         property "sonar.host.url", "http://$sonarServerUrl:9000"
         property "sonar.jdbc.url", "jdbc:h2:tcp://$sonarServerUrl:9092/sonar"
         property "sonar.jdbc.driverClassName", "org.h2.Driver"
         property "sonar.jdbc.username", "sonar"
         property "sonar.jdbc.password", "sonar"
         properties ["sonar.sources"] += sourceSets.main.allSource.srcDirs
         //properties ["sonar.tests"] += sourceSets.test.java.srcDirs
         properties ["sonar.tests"] += sourceSets.integrationTest.allSource.srcDirs
      }
   }
   checkstyle {
        configFile = new File(rootDir, "config/checkstyle.xml")
        ignoreFailures = true
        //sourceSets = [sourceSets.main, sourceSets.test, sourceSets.integrationTest]
        sourceSets = [sourceSets.main]
   }
   findbugs {
        ignoreFailures = true
        sourceSets = [sourceSets.main]
   }
   pmd {
        ruleSets = ["basic", "braces", "design"]
        ignoreFailures = true
   }
   jacoco {
      toolVersion = "0.6.2.201302030002"
      reportsDir = file("$buildDir/customJacocoReportDir")
   }
   task testReport(type: TestReport) {
      destinationDir = file("$buildDir/reports/allTests")
   }
   test {
        jacoco {
            //destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
            destinationFile = file("$buildDir/jacoco/test.exec")
            //classDumpFile = file("$buildDir/jacoco/classpathdumps")
            classDumpFile = file("$buildDir/build/classes/test")
        }
   }
   jacocoTestReport {
         group = "Reporting"
         description = "Generate Jacoco coverage reports after running tests."
         reports {
                xml{
                    enabled true
                    destination "${buildDir}/reports/jacoco/jacoco.xml"
                }
                csv.enabled false
                html{
                    enabled true
                    destination "${buildDir}/jacocoHtml"
                }
        }
        additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
        //additionalSourceDirs = files([sourceSets.main.allJava.srcDirs, xxxx, 'xxxxyyyy' ])
   }
}

build.gradle файл выглядит так:

import com.tr.ids.gradle.CustomFileUtil
apply plugin: 'CustomSetup'
apply plugin: 'java'
apply plugin: 'customJarService'
apply plugin: 'customWarService'
sourceSets {
   main {
      java {
         srcDir 'src/java'
      }
   }
   test {
      java {
         srcDir 'test/java'
      }
      resources {
         srcDir 'test/resources'
         srcDir 'conf'
      }
   }
   integrationTest {
      java {
         srcDir 'src/java-test'
      }
   }
}
// Read dependency lists from external files. Our custom plugin reads a dep-xxx.txt file for compile/test/war related .jar file entries
// where each entry is like: groupid:artifactid:x.x.x
// and these artifact jars are available in Artifactory
List depListCompile = customFileUtil.readIntoList( "$projectDir/dep-compile.txt" )
List depListTest = customFileUtil.readIntoList( "$projectDir/dep-testArtifacts.txt" )
List depListWar = customFileUtil.readIntoList( "$projectDir/dep-war.txt" )
// Define dependencies
dependencies {
   // Compilation
   compile  depListCompile
   // Unit Tests
   testCompile depListTest
   // Integration tests
   // Everything from compile and testCompile targets
   integrationTestCompile configurations.compile
   integrationTestCompile configurations.testCompile
   // Output of compiling "main" files
   integrationTestCompile sourceSets.main.output
   // Additional dependencies from war and others
   integrationTestCompile depListTest, depListWar
   // All configuration files
   integrationTestRuntime files( 'conf' )
}
task deployTomcat( type: Copy, dependsOn: [ jar, compileIntegrationTestJava, warService ] ) {
   from "$buildDir/customWar/${project.name}.war"
   into "$projectDir/tomcat/webapps"
}
build {
  dependsOn deployTomcat
}
task integrationTest( type: Test, dependsOn: cleanTest ) {
   jacoco {
      //destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
      destinationFile = file("$buildDir/jacoco/integrationTest.exec")
      //classDumpFile = file("$buildDir/jacoco/classpathdumps")
      classDumpFile = file("$buildDir/classes/integrationTest")
   }
   testClassesDir = sourceSets.integrationTest.output.classesDir
   classpath = sourceSets.integrationTest.runtimeClasspath
}
apply plugin: 'eclipse'
eclipse.classpath {
   // Define output directory so Eclipse does not accidentally clobber /bin
   defaultOutputDir = file( 'out/classes' )
   // Add integration test
   plusConfigurations += configurations.integrationTestCompile
   // Remove unnecessary files
   file.whenMerged { classpath ->
      classpath.entries.removeAll { entry -> ( entry.path.indexOf( '/build/classes/main' ) > 0 ) }
      classpath.entries.removeAll { entry -> ( entry.path.indexOf( '/build/resources/main' ) > 0 ) }
   }
}

Мои вопросы:



1) ПочемуGradle Clean Build Integration » - который успешно работает, перезаписывает результаты тестов в папках build / reports / tests и build / test-results.

2) Это неНезависимо от того, какое имя я даю для файла .exec в общем файле gradle для теста и в build.gradle для задачи интеграции с тестом для jacoco, он всегда создает файл test.exec иgrationTest.exec, но результирующая папка сборки / jacocoHtml файла index.html не делает 't показать покрытие / файлы, относящиеся к обоим модульным / интеграционным тестам. Чтобы доказать это, если я побегуgradle чистая сборка интеграцииTest jacocoTestReport sonarRunner "Я вижу рабочее место для работы, теперь содержит ".sonar» Папка и папка build / reports / sonar, которая содержит другой файл с именем "общая-xxx.exec» некоторый файл, но этот размер файла не близко к "сумма» модуля test.exec и размер файла ITgrationTest.exec. Хотя его размер больше, чем test.exec размер файла на несколько байтов.

3) Какую конфигурацию я могу установить, чтобы иметь общее покрытие как для модульных, так и для ИТ-тестов, то есть в целом ... исполняемый файл получает хороший размер (после запуска задачи sonarRunner). Во время задачи sonarRunner я вижу задачу SonarRunner "jacocoSensor step " действительно видит как файлы UT и IT .exec, так и общий файл .exec автоматически (хорошая функция от Sonar).

Ответы на вопрос(2)

Ваш ответ на вопрос