Files
spring-framework/spring-test/spring-test.gradle
Sam Brannen 9962aa00a0 Introduce TestClassScanner to locate Spring test classes for AOT processing
This commit introduces the TestClassScanner which scans provided
classpath roots for Spring integration test classes using the JUnit
Platform Launcher API which allows all registered TestEngines to
discover tests according to their own rules.

The scanner currently detects the following categories of Spring
integration test classes.

- JUnit Jupiter: classes that register the SpringExtension via
  @ExtendWith.
- JUnit 4: classes that register the SpringJUnit4ClassRunner or
  SpringRunner via @RunWith.
- Generic: classes that are annotated with @ContextConfiguration or
  @BootstrapWith.

The scanner has been tested with the following TestEngine
implementations for the JUnit Platform.

- JUnit Jupiter
- JUnit Vintage
- JUnit Platform Suite Engine
- TestNG Engine for the JUnit Platform

Closes gh-28824
2022-07-15 13:21:22 +02:00

104 lines
4.4 KiB
Groovy

description = "Spring TestContext Framework"
apply plugin: "kotlin"
dependencies {
api(project(":spring-core"))
optional(project(":spring-aop"))
optional(project(":spring-beans"))
optional(project(":spring-context"))
optional(project(":spring-jdbc"))
optional(project(":spring-orm"))
optional(project(":spring-tx"))
optional(project(":spring-web"))
optional(project(":spring-webflux"))
optional(project(":spring-webmvc"))
optional(project(":spring-websocket"))
optional("jakarta.activation:jakarta.activation-api")
optional("jakarta.el:jakarta.el-api")
optional("jakarta.inject:jakarta.inject-api")
optional("jakarta.servlet:jakarta.servlet-api")
optional("jakarta.servlet.jsp:jakarta.servlet.jsp-api")
optional("jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api")
optional("jakarta.xml.bind:jakarta.xml.bind-api")
optional("jakarta.websocket:jakarta.websocket-api")
optional("junit:junit")
optional("org.apache.tomcat.embed:tomcat-embed-core")
optional("org.junit.platform:junit-platform-launcher") // for AOT processing
optional("org.junit.jupiter:junit-jupiter-api")
optional("org.testng:testng")
optional("org.aspectj:aspectjweaver")
optional("org.apache.groovy:groovy")
optional("org.hamcrest:hamcrest")
optional("net.sourceforge.htmlunit:htmlunit")
optional("org.seleniumhq.selenium:htmlunit-driver") {
exclude group: "net.bytebuddy", module: "byte-buddy"
}
optional("org.seleniumhq.selenium:selenium-java") {
exclude group: "net.bytebuddy", module: "byte-buddy"
}
optional("org.xmlunit:xmlunit-matchers")
optional("org.skyscreamer:jsonassert")
optional("com.jayway.jsonpath:json-path")
optional("org.jetbrains.kotlin:kotlin-reflect")
optional("org.jetbrains.kotlin:kotlin-stdlib")
optional("io.projectreactor:reactor-test")
optional("org.jetbrains.kotlinx:kotlinx-coroutines-core")
optional("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
testImplementation(project(":spring-context-support"))
testImplementation(project(":spring-oxm"))
testImplementation(testFixtures(project(":spring-beans")))
testImplementation(testFixtures(project(":spring-context")))
testImplementation(testFixtures(project(":spring-core")))
testImplementation(testFixtures(project(":spring-tx")))
testImplementation(testFixtures(project(":spring-web")))
testImplementation("jakarta.annotation:jakarta.annotation-api")
testImplementation("javax.cache:cache-api")
testImplementation("jakarta.ejb:jakarta.ejb-api")
testImplementation("jakarta.interceptor:jakarta.interceptor-api")
testImplementation("jakarta.mail:jakarta.mail-api")
testImplementation("org.hibernate:hibernate-core-jakarta")
testImplementation("org.hibernate:hibernate-validator")
testImplementation("jakarta.validation:jakarta.validation-api")
testImplementation("org.junit.platform:junit-platform-testkit")
testImplementation("com.fasterxml.jackson.core:jackson-databind")
testImplementation("com.thoughtworks.xstream:xstream")
testImplementation("com.rometools:rome")
testImplementation("org.hsqldb:hsqldb")
testImplementation("org.apache.httpcomponents:httpclient")
testImplementation("io.projectreactor.netty:reactor-netty-http")
testImplementation("de.bechte.junit:junit-hierarchicalcontextrunner")
testRuntimeOnly("org.junit.vintage:junit-vintage-engine") {
exclude group: "junit", module: "junit"
}
testRuntimeOnly("org.junit.support:testng-engine")
testRuntimeOnly("org.glassfish:jakarta.el")
testRuntimeOnly("com.sun.xml.bind:jaxb-core")
testRuntimeOnly("com.sun.xml.bind:jaxb-impl")
}
// Prevent xml-apis from being used so that the corresponding XML APIs from
// the JDK's `java.xml` module are used instead. This allows spring-test to
// build in Eclipse IDE which fails to compile if there is a split package
// between a JDK system module and the unnamed module (for JARs on the
// classpath).
configurations.optional {
exclude group: "xml-apis", module: "xml-apis"
}
test {
description = "Runs JUnit 4, JUnit Jupiter, and TestNG tests."
useJUnitPlatform {
includeEngines "junit-vintage", "junit-jupiter", "testng"
excludeTags "failing-test-case"
}
// We use `include` instead of `filter.includeTestsMatching`, since
// the latter results in some tests being executed/reported
// multiple times.
include(["**/*Tests.class", "**/*Test.class"])
filter.excludeTestsMatching("*TestCase")
systemProperty("testGroups", project.properties.get("testGroups"))
// Java Util Logging for the JUnit Platform.
// systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager")
}