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..f54df8f28766 --- /dev/null +++ b/testing-modules/junit-5-advanced-3/pom.xml @@ -0,0 +1,49 @@ + + + 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} + + + + + + 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/GreeterClassTemplateUnitTest.java b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java new file mode 100644 index 000000000000..db9512829446 --- /dev/null +++ b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/classtemplate/GreeterClassTemplateUnitTest.java @@ -0,0 +1,43 @@ +package com.baeldung.classtemplate; + +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; +import org.junit.jupiter.api.extension.ExtendWith; + +@ClassTemplate +@ExtendWith(GreeterClassTemplateInvocationContextProvider.class) +class GreeterClassTemplateUnitTest { + + private static final Logger LOG = + System.getLogger("GreeterClassTemplateUnitTest"); + + private final String language; + + GreeterClassTemplateUnitTest(String language) { + this.language = language; + } + + @BeforeEach + void logContext() { + LOG.log(Level.INFO, () -> ">> Context: 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 + ); + } +} +