Skip to content

Commit d7af433

Browse files
authored
BAEL-9314 (#18726)
* BAEL-9314 * BAEL-9314 fix pom.xml * Added @beforeeach to print the language of the context * Changed GreeterClassTemplateTest to GreeterClassTemplateUnitTest * Use log statements instead of print statements
1 parent 36e107d commit d7af433

File tree

4 files changed

+158
-0
lines changed

4 files changed

+158
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<artifactId>junit-5-advanced-3</artifactId>
7+
<version>1.0-SNAPSHOT</version>
8+
<name>junit-5-advanced-3</name>
9+
<description>Advanced JUnit 5 Topics</description>
10+
11+
<parent>
12+
<groupId>com.baeldung</groupId>
13+
<artifactId>testing-modules</artifactId>
14+
<version>1.0.0-SNAPSHOT</version>
15+
</parent>
16+
17+
<dependencies>
18+
<dependency>
19+
<groupId>org.junit.jupiter</groupId>
20+
<artifactId>junit-jupiter</artifactId>
21+
<version>${junit-jupiter.version}</version>
22+
<scope>test</scope>
23+
</dependency>
24+
<dependency>
25+
<groupId>org.junit.platform</groupId>
26+
<artifactId>junit-platform-launcher</artifactId>
27+
<version>${junit-platform-launcher.version}</version>
28+
<scope>test</scope>
29+
</dependency>
30+
</dependencies>
31+
32+
<build>
33+
<plugins>
34+
<plugin>
35+
<groupId>org.apache.maven.plugins</groupId>
36+
<artifactId>maven-surefire-plugin</artifactId>
37+
<version>${maven-surefire-plugin.version}</version>
38+
</plugin>
39+
</plugins>
40+
</build>
41+
42+
<properties>
43+
<junit-jupiter.version>5.13.4</junit-jupiter.version>
44+
<junit-platform-launcher.version>1.13.4</junit-platform-launcher.version>
45+
<maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
46+
</properties>
47+
48+
</project>
49+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.baeldung.classtemplate;
2+
3+
public class Greeter {
4+
5+
public String greet(String name, String language) {
6+
return "it".equals(language) ? "Ciao " + name : "Hello " + name;
7+
}
8+
}
9+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.baeldung.classtemplate;
2+
3+
import java.util.List;
4+
import java.util.stream.Stream;
5+
6+
import org.junit.jupiter.api.ClassTemplate;
7+
import org.junit.jupiter.api.extension.ClassTemplateInvocationContext;
8+
import org.junit.jupiter.api.extension.ClassTemplateInvocationContextProvider;
9+
import org.junit.jupiter.api.extension.Extension;
10+
import org.junit.jupiter.api.extension.ExtensionContext;
11+
import org.junit.jupiter.api.extension.ParameterContext;
12+
import org.junit.jupiter.api.extension.ParameterResolver;
13+
14+
public class GreeterClassTemplateInvocationContextProvider
15+
implements ClassTemplateInvocationContextProvider {
16+
17+
@Override
18+
public boolean supportsClassTemplate(ExtensionContext context) {
19+
return context.getTestClass()
20+
.map(c -> c.isAnnotationPresent(ClassTemplate.class))
21+
.orElse(false);
22+
}
23+
24+
@Override
25+
public Stream<ClassTemplateInvocationContext> provideClassTemplateInvocationContexts(
26+
ExtensionContext context) {
27+
28+
return Stream.of(contextFor("en"), contextFor("it"));
29+
}
30+
31+
private ClassTemplateInvocationContext contextFor(String language) {
32+
ParameterResolver resolver = new ParameterResolver() {
33+
@Override
34+
public boolean supportsParameter(ParameterContext pc, ExtensionContext ec) {
35+
return pc.getParameter().getType() == String.class;
36+
}
37+
38+
@Override
39+
public Object resolveParameter(ParameterContext pc, ExtensionContext ec) {
40+
return language;
41+
}
42+
};
43+
44+
return new ClassTemplateInvocationContext() {
45+
@Override
46+
public String getDisplayName(int invocationIndex) {
47+
return "Language-" + language;
48+
}
49+
50+
@Override
51+
public List<Extension> getAdditionalExtensions() {
52+
return List.of(resolver);
53+
}
54+
};
55+
}
56+
}
57+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.baeldung.classtemplate;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import static java.lang.System.Logger;
6+
import static java.lang.System.Logger.Level;
7+
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.ClassTemplate;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.extension.ExtendWith;
12+
13+
@ClassTemplate
14+
@ExtendWith(GreeterClassTemplateInvocationContextProvider.class)
15+
class GreeterClassTemplateUnitTest {
16+
17+
private static final Logger LOG =
18+
System.getLogger("GreeterClassTemplateUnitTest");
19+
20+
private final String language;
21+
22+
GreeterClassTemplateUnitTest(String language) {
23+
this.language = language;
24+
}
25+
26+
@BeforeEach
27+
void logContext() {
28+
LOG.log(Level.INFO, () -> ">> Context: Language-" + language);
29+
}
30+
31+
@Test
32+
void whenGreet_thenLocalizedMessage() {
33+
34+
Greeter greeter = new Greeter();
35+
String actual = greeter.greet("Baeldung", language);
36+
37+
assertEquals(
38+
"it".equals(language) ? "Ciao Baeldung" : "Hello Baeldung",
39+
actual
40+
);
41+
}
42+
}
43+

0 commit comments

Comments
 (0)