У меня есть проект Spring, в котором я написал несколько модульных и интеграционных тестов. Теперь я хочу создать пользовательские задачи для запуска всех модульных тестов, всех интеграционных тестов и одну задачу для запуска обоих. Но как я могу это сделать?
Как создать задачу Gradle для запуска только определенных тестов в Spring
Ответы (1)
Я бы предложил выделить интеграционные тесты в отдельный набор исходников. По умолчанию у вас уже есть 2 исходных набора, один для производственного кода и один для тестов. Чтобы создать новый исходный набор (создайте новый каталог в src/integrationTest/java
) и добавьте следующую конфигурацию с помощью Junit5:
test {
useJUnitPlatform()
}
sourceSets {
integrationTest {
java.srcDir file("src/integrationTest/java")
resources.srcDir file("src/integrationTest/resources")
compileClasspath += sourceSets.main.output + configurations.testRuntime
runtimeClasspath += output + compileClasspath
}
}
Для отдельной задачи:
task integrationTest(type: Test) {
description = 'Runs the integration tests.'
group = 'verification'
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
useJUnitPlatform()
reports {
html.enabled true
junitXml.enabled = true
}
}
Теперь у вас есть 3 задачи:
gradlew test
gradlew integrationTest
gradlew check
- запускает оба, так как это зависит от тестовой задачи, которая расширяет оба
Если вы также используете jacoco и хотите объединить результаты теста, у вас могут быть следующие задачи:
task coverageMerge(type: JacocoMerge) {
destinationFile file("${rootProject.buildDir}/jacoco/test.exec")
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
}
// aggregate all coverage data at root level
if (tasks.findByName("test")) {
tasks.findByName("test").finalizedBy coverageMerge
}
if (tasks.findByName("integrationTest")) {
tasks.findByName("integrationTest").finalizedBy coverageMerge
}
task codeCoverageReport(type: JacocoReport) {
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
subprojects.each {
if (!it.name.contains('generated')) {
sourceSets it.sourceSets.main
}
}
reports {
xml.enabled true
html.enabled true
html.setDestination(new File("${buildDir}/reports/jacoco"))
csv.enabled false
}
}
Чтобы запустить отчет о покрытии, просто выполните
gradlew codeCoverageReport
person
Vaelyr
schedule
24.11.2019
@Suite
, чтобы сгруппировать их по желанию. - person Martin Zeitler   schedule 24.11.2019