From bb88ec9ea59646a578fe87fca18bd2c7446482e9 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Tue, 15 Jul 2025 21:00:20 +0200 Subject: [PATCH] Configure Mockito Java agent in Test tasks Closes gh-35207 --- .../build/TestConventions.java | 22 +++++++++++++++++-- framework-platform/framework-platform.gradle | 2 +- gradle.properties | 1 + 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/build/TestConventions.java b/buildSrc/src/main/java/org/springframework/build/TestConventions.java index 6e977938c78..e9477f64085 100644 --- a/buildSrc/src/main/java/org/springframework/build/TestConventions.java +++ b/buildSrc/src/main/java/org/springframework/build/TestConventions.java @@ -16,9 +16,9 @@ package org.springframework.build; -import java.util.Map; - import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.Dependency; import org.gradle.api.plugins.JavaBasePlugin; import org.gradle.api.tasks.testing.Test; import org.gradle.api.tasks.testing.TestFrameworkOptions; @@ -26,12 +26,16 @@ import org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions; import org.gradle.testretry.TestRetryPlugin; import org.gradle.testretry.TestRetryTaskExtension; +import java.util.Map; + /** * Conventions that are applied in the presence of the {@link JavaBasePlugin}. When the * plugin is applied: * * * @author Brian Clozel @@ -45,6 +49,7 @@ class TestConventions { } private void configureTestConventions(Project project) { + configureMockitoAgent(project); project.getTasks().withType(Test.class, test -> { configureTests(project, test); @@ -75,6 +80,19 @@ class TestConventions { ); } + private void configureMockitoAgent(Project project) { + if (project.hasProperty("mockitoVersion")) { + String mockitoVersion = (String) project.getProperties().get("mockitoVersion"); + Configuration mockitoAgentConfig = project.getConfigurations().create("mockitoAgent"); + mockitoAgentConfig.setTransitive(false); + Dependency mockitoCore = project.getDependencies().create("org.mockito:mockito-core:" + mockitoVersion); + mockitoAgentConfig.getDependencies().add(mockitoCore); + project.afterEvaluate(p -> { + p.getTasks().withType(Test.class, test -> test.jvmArgs("-javaagent:" + mockitoAgentConfig.getAsPath())); + }); + } + } + private void configureTestRetryPlugin(Project project, Test test) { project.getPlugins().withType(TestRetryPlugin.class, testRetryPlugin -> { TestRetryTaskExtension testRetry = test.getExtensions().getByType(TestRetryTaskExtension.class); diff --git a/framework-platform/framework-platform.gradle b/framework-platform/framework-platform.gradle index 82c32e802c2..ad59b4f3e47 100644 --- a/framework-platform/framework-platform.gradle +++ b/framework-platform/framework-platform.gradle @@ -20,7 +20,7 @@ dependencies { api(platform("org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.2")) api(platform("org.jetbrains.kotlinx:kotlinx-serialization-bom:1.9.0")) api(platform("org.junit:junit-bom:5.13.3")) - api(platform("org.mockito:mockito-bom:5.18.0")) + api(platform("org.mockito:mockito-bom:${mockitoVersion}")) api(platform("tools.jackson:jackson-bom:3.0.0-rc5")) constraints { diff --git a/gradle.properties b/gradle.properties index 0e4ef3c1412..8efd1df600d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,6 +5,7 @@ org.gradle.jvmargs=-Xmx2048m org.gradle.parallel=true kotlinVersion=2.2.0 +mockitoVersion=5.18.0 kotlin.jvm.target.validation.mode=ignore kotlin.stdlib.default.dependency=false