From fc9b11cc741f74ddd73ccef9ee680cb56882e9f2 Mon Sep 17 00:00:00 2001 From: Francesco Galgani Date: Sun, 3 Aug 2025 15:29:27 +0200 Subject: [PATCH 1/5] BAEL-9314 --- testing-modules/junit-5-advanced-3/pom.xml | 59 +++++++++++++++++++ .../com/baeldung/classtemplate/Greeter.java | 9 +++ ...lassTemplateInvocationContextProvider.java | 57 ++++++++++++++++++ .../GreeterClassTemplateTest.java | 31 ++++++++++ 4 files changed, 156 insertions(+) create mode 100644 testing-modules/junit-5-advanced-3/pom.xml create mode 100644 testing-modules/junit-5-advanced-3/src/main/java/com/baeldung/classtemplate/Greeter.java create mode 100644 testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateInvocationContextProvider.java create mode 100644 testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java diff --git a/testing-modules/junit-5-advanced-3/pom.xml b/testing-modules/junit-5-advanced-3/pom.xml new file mode 100644 index 000000000000..af4238d7c8a2 --- /dev/null +++ b/testing-modules/junit-5-advanced-3/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + junit-5-advanced-3 + 1.0-SNAPSHOT + junit-5-advanced-3 + Advanced JUnit 5 Topics + + + com.baeldung + testing-modules + 1.0.0-SNAPSHOT + + + + + org.junit.jupiter + junit-jupiter + ${junit-jupiter.version} + test + + + org.junit.platform + junit-platform-launcher + ${junit-platform-launcher.version} + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + false + + + + org.junit.platform + junit-platform-launcher + ${junit-platform-launcher.version} + + + + + + + + 5.13.4 + 1.13.4 + 3.5.3 + + + + diff --git a/testing-modules/junit-5-advanced-3/src/main/java/com/baeldung/classtemplate/Greeter.java b/testing-modules/junit-5-advanced-3/src/main/java/com/baeldung/classtemplate/Greeter.java new file mode 100644 index 000000000000..3763e1dd949a --- /dev/null +++ b/testing-modules/junit-5-advanced-3/src/main/java/com/baeldung/classtemplate/Greeter.java @@ -0,0 +1,9 @@ +package com.baeldung.classtemplate; + +public class Greeter { + + public String greet(String name, String language) { + return "it".equals(language) ? "Ciao " + name : "Hello " + name; + } +} + diff --git a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateInvocationContextProvider.java b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateInvocationContextProvider.java new file mode 100644 index 000000000000..f5cc9d94e790 --- /dev/null +++ b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateInvocationContextProvider.java @@ -0,0 +1,57 @@ +package com.baeldung.classtemplate; + +import java.util.List; +import java.util.stream.Stream; + +import org.junit.jupiter.api.ClassTemplate; +import org.junit.jupiter.api.extension.ClassTemplateInvocationContext; +import org.junit.jupiter.api.extension.ClassTemplateInvocationContextProvider; +import org.junit.jupiter.api.extension.Extension; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolver; + +public class GreeterClassTemplateInvocationContextProvider + implements ClassTemplateInvocationContextProvider { + + @Override + public boolean supportsClassTemplate(ExtensionContext context) { + return context.getTestClass() + .map(c -> c.isAnnotationPresent(ClassTemplate.class)) + .orElse(false); + } + + @Override + public Stream provideClassTemplateInvocationContexts( + ExtensionContext context) { + + return Stream.of(contextFor("en"), contextFor("it")); + } + + private ClassTemplateInvocationContext contextFor(String language) { + ParameterResolver resolver = new ParameterResolver() { + @Override + public boolean supportsParameter(ParameterContext pc, ExtensionContext ec) { + return pc.getParameter().getType() == String.class; + } + + @Override + public Object resolveParameter(ParameterContext pc, ExtensionContext ec) { + return language; + } + }; + + return new ClassTemplateInvocationContext() { + @Override + public String getDisplayName(int invocationIndex) { + return "Language-" + language; + } + + @Override + public List getAdditionalExtensions() { + return List.of(resolver); + } + }; + } +} + diff --git a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java new file mode 100644 index 000000000000..4e204476e7ac --- /dev/null +++ b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java @@ -0,0 +1,31 @@ +package com.baeldung.classtemplate; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.ClassTemplate; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@ClassTemplate +@ExtendWith(GreeterClassTemplateInvocationContextProvider.class) +class GreeterClassTemplateTest { + + private final String language; + + GreeterClassTemplateTest(String language) { + this.language = language; + } + + @Test + void whenGreet_thenLocalizedMessage() { + + Greeter greeter = new Greeter(); + String actual = greeter.greet("Baeldung", language); + + assertEquals( + "it".equals(language) ? "Ciao Baeldung" : "Hello Baeldung", + actual + ); + } +} + From 369afc5137e3670801d8de011360bbe7abc418ca Mon Sep 17 00:00:00 2001 From: Francesco Galgani Date: Sun, 3 Aug 2025 20:50:01 +0200 Subject: [PATCH 2/5] BAEL-9314 fix pom.xml --- testing-modules/junit-5-advanced-3/pom.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/testing-modules/junit-5-advanced-3/pom.xml b/testing-modules/junit-5-advanced-3/pom.xml index af4238d7c8a2..f54df8f28766 100644 --- a/testing-modules/junit-5-advanced-3/pom.xml +++ b/testing-modules/junit-5-advanced-3/pom.xml @@ -35,16 +35,6 @@ org.apache.maven.plugins maven-surefire-plugin ${maven-surefire-plugin.version} - - false - - - - org.junit.platform - junit-platform-launcher - ${junit-platform-launcher.version} - - From ea4048025003c6d1c8d7f8469e712248aacef89d Mon Sep 17 00:00:00 2001 From: Francesco Galgani Date: Sat, 9 Aug 2025 15:51:19 +0200 Subject: [PATCH 3/5] Added @BeforeEach to print the language of the context --- .../baeldung/classtemplate/GreeterClassTemplateTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java index 4e204476e7ac..d0a77afb756d 100644 --- a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java +++ b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.ClassTemplate; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -16,6 +17,11 @@ class GreeterClassTemplateTest { this.language = language; } + @BeforeEach + void logContext() { + System.out.println(">> Context: Language-" + language); + } + @Test void whenGreet_thenLocalizedMessage() { From 2aa3496e90e1ddd59ceb00d9c716dd55d50d2571 Mon Sep 17 00:00:00 2001 From: Francesco Galgani Date: Wed, 13 Aug 2025 15:41:37 +0200 Subject: [PATCH 4/5] Changed GreeterClassTemplateTest to GreeterClassTemplateUnitTest --- ...assTemplateTest.java => GreeterClassTemplateUnitTest.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/{GreeterClassTemplateTest.java => GreeterClassTemplateUnitTest.java} (90%) diff --git a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java similarity index 90% rename from testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java rename to testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java index d0a77afb756d..3d160cd6ca33 100644 --- a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateTest.java +++ b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java @@ -9,11 +9,11 @@ @ClassTemplate @ExtendWith(GreeterClassTemplateInvocationContextProvider.class) -class GreeterClassTemplateTest { +class GreeterClassTemplateUnitTest { private final String language; - GreeterClassTemplateTest(String language) { + GreeterClassTemplateUnitTest(String language) { this.language = language; } From 1c56241aea38bc0fc83f32065bf7ed23f9dd73fb Mon Sep 17 00:00:00 2001 From: Francesco Galgani Date: Wed, 13 Aug 2025 15:58:03 +0200 Subject: [PATCH 5/5] Use log statements instead of print statements --- .../classtemplate/GreeterClassTemplateUnitTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java index 3d160cd6ca33..db9512829446 100644 --- a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java +++ b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java @@ -2,6 +2,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import static java.lang.System.Logger; +import static java.lang.System.Logger.Level; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.ClassTemplate; import org.junit.jupiter.api.Test; @@ -11,6 +14,9 @@ @ExtendWith(GreeterClassTemplateInvocationContextProvider.class) class GreeterClassTemplateUnitTest { + private static final Logger LOG = + System.getLogger("GreeterClassTemplateUnitTest"); + private final String language; GreeterClassTemplateUnitTest(String language) { @@ -19,7 +25,7 @@ class GreeterClassTemplateUnitTest { @BeforeEach void logContext() { - System.out.println(">> Context: Language-" + language); + LOG.log(Level.INFO, () -> ">> Context: Language-" + language); } @Test