diff --git a/pom.xml b/pom.xml
index 8ea3462..64d3356 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
plexus-testing
- 1.6.2-SNAPSHOT
+ 1.7.0-SNAPSHOT
Plexus Testing
Library to help testing plexus components
@@ -36,7 +36,7 @@
0.9.0.M4
- 2025-10-11T14:58:36Z
+ 2025-10-13T21:13:09Z
@@ -72,6 +72,19 @@
org.junit.jupiter
junit-jupiter-api
+
+
+ org.mockito
+ mockito-core
+ 4.11.0
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ 4.11.0
+ test
+
diff --git a/src/main/java/org/codehaus/plexus/testing/PlexusExtension.java b/src/main/java/org/codehaus/plexus/testing/PlexusExtension.java
index b344041..b4b84e1 100644
--- a/src/main/java/org/codehaus/plexus/testing/PlexusExtension.java
+++ b/src/main/java/org/codehaus/plexus/testing/PlexusExtension.java
@@ -58,7 +58,7 @@
* This is a slightly modified version of the original plexus class
* available at https://raw.githubusercontent.com/codehaus-plexus/plexus-containers/master/plexus-container-default/
* src/main/java/org/codehaus/plexus/PlexusTestCase.java
- * in order to migrate the tests to JUnit 4.
+ * in order to migrate the tests to JUnit 5.
*
* @author Jason van Zyl
* @author Trygve Laugstøl
@@ -94,7 +94,6 @@ protected void setContext(ExtensionContext context) {
this.context = context;
}
- @SuppressWarnings("ResultOfMethodCallIgnored")
protected void setupContainer() {
// ----------------------------------------------------------------------------
// Context Setup
@@ -136,12 +135,14 @@ protected void setupContainer() {
}
customizeContainerConfiguration(containerConfiguration);
+ testInstanceCustomizeContainerConfiguration(containerConfiguration);
try {
container = new DefaultPlexusContainer(containerConfiguration);
} catch (PlexusContainerException e) {
throw new IllegalArgumentException("Failed to create plexus container.", e);
}
+ testInstanceCustomizeContainer(container);
}
/**
@@ -155,6 +156,20 @@ protected void customizeContainerConfiguration(ContainerConfiguration containerC
containerConfiguration.setClassPathScanning(PlexusConstants.SCANNING_INDEX);
}
+ private void testInstanceCustomizeContainerConfiguration(ContainerConfiguration containerConfiguration) {
+ Object testInstance = context.getRequiredTestInstance();
+ if (testInstance instanceof PlexusTestConfiguration) {
+ ((PlexusTestConfiguration) testInstance).customizeConfiguration(containerConfiguration);
+ }
+ }
+
+ private void testInstanceCustomizeContainer(PlexusContainer container) {
+ Object testInstance = context.getRequiredTestInstance();
+ if (testInstance instanceof PlexusTestConfiguration) {
+ ((PlexusTestConfiguration) testInstance).customizeContainer(container);
+ }
+ }
+
protected void customizeContext(Context context) {}
protected PlexusConfiguration customizeComponentConfiguration() {
diff --git a/src/main/java/org/codehaus/plexus/testing/PlexusTestConfiguration.java b/src/main/java/org/codehaus/plexus/testing/PlexusTestConfiguration.java
new file mode 100644
index 0000000..7707902
--- /dev/null
+++ b/src/main/java/org/codehaus/plexus/testing/PlexusTestConfiguration.java
@@ -0,0 +1,28 @@
+package org.codehaus.plexus.testing;
+
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusContainer;
+
+/**
+ * Allow to customize the Plexus container by test class.
+ *
+ * @since 1.7.0
+ */
+public interface PlexusTestConfiguration {
+
+ /**
+ * Customize the container configuration before the container is created.
+ *
+ * @param containerConfiguration the container configuration to customize
+ * @since 1.7.0
+ */
+ default void customizeConfiguration(ContainerConfiguration containerConfiguration) {}
+
+ /**
+ * Customize the container after it has been created.
+ *
+ * @param container the container to customize
+ * @since 1.7.0
+ */
+ default void customizeContainer(PlexusContainer container) {}
+}
diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md
index 27da2b2..719b5d0 100644
--- a/src/site/markdown/index.md
+++ b/src/site/markdown/index.md
@@ -8,6 +8,14 @@ Library to help testing plexus components
+### Customization of the Plexus Container
+
+Test class can customize the Plexus Container used for testing by implementing
+the [`PlexusTestConfiguration`](apidocs/org/codehaus/plexus/testing/PlexusTestConfiguration.html).
+All methods have default empty implementations so you can implement only the ones you need.
+
+
+
### Used classes in test
diff --git a/src/test/java/org/codehaus/plexus/testing/PlexusTestCustomizeTest.java b/src/test/java/org/codehaus/plexus/testing/PlexusTestCustomizeTest.java
new file mode 100644
index 0000000..6e5af9c
--- /dev/null
+++ b/src/test/java/org/codehaus/plexus/testing/PlexusTestCustomizeTest.java
@@ -0,0 +1,66 @@
+package org.codehaus.plexus.testing;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// START SNIPPET: test-customize-class
+import javax.inject.Inject;
+
+import org.codehaus.plexus.PlexusContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+
+// MockitoExtension must be first
+@ExtendWith(MockitoExtension.class)
+@PlexusTest
+class PlexusTestCustomizeTest implements PlexusTestConfiguration {
+
+ @Mock
+ private TestJavaxComponent2 mockComponent2;
+
+ /*
+ Customize the container configuration before it is used to create the container.
+
+ Method has default empty implementation so not need to implement if not used.
+
+ @Override
+ public void customizeConfiguration(ContainerConfiguration containerConfiguration) {
+
+ }
+ */
+
+ @Override
+ public void customizeContainer(PlexusContainer container) {
+ container.addComponent(mockComponent2, TestJavaxComponent2.class.getName());
+ }
+
+ @Inject
+ private TestJavaxComponent testJavaxComponent;
+
+ @Test
+ void dependencyShouldBeInjected() {
+ assertNotNull(testJavaxComponent);
+ assertSame(testJavaxComponent.getTestComponent2(), mockComponent2);
+ }
+}
+// END SNIPPET: test-customize-class