Skip to content

Commit dfae145

Browse files
lor6pivovarit
authored andcommitted
junit 5 extensions (eugenp#2233)
* junit 5 extensions * fix exceptions * add back parent
1 parent e6a0bbe commit dfae145

File tree

15 files changed

+376
-38
lines changed

15 files changed

+376
-38
lines changed

junit5/pom.xml

Lines changed: 57 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<name>junit5</name>
1111
<description>Intro to JUnit 5</description>
12-
12+
1313
<parent>
1414
<groupId>com.baeldung</groupId>
1515
<artifactId>parent-modules</artifactId>
@@ -19,16 +19,24 @@
1919
<properties>
2020
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2121
<java.version>1.8</java.version>
22-
<junit.jupiter.version>5.0.0-M4</junit.jupiter.version>
23-
<junit.platform.version>1.0.0-M4</junit.platform.version>
24-
<junit.vintage.version>4.12.0-M4</junit.vintage.version>
25-
<junit4.version>4.12</junit4.version>
22+
<junit.jupiter.version>5.0.0-M5</junit.jupiter.version>
23+
<junit.platform.version>1.0.0-M5</junit.platform.version>
24+
<junit.vintage.version>4.12.0-M5</junit.vintage.version>
25+
<log4j2.version>2.8.2</log4j2.version>
26+
<h2.version>1.4.196</h2.version>
2627

2728
<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
2829
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
30+
<junit4.version>4.12</junit4.version>
2931
</properties>
3032

3133
<build>
34+
<resources>
35+
<resource>
36+
<directory>src/test/resources</directory>
37+
<filtering>true</filtering>
38+
</resource>
39+
</resources>
3240
<plugins>
3341
<plugin>
3442
<artifactId>maven-compiler-plugin</artifactId>
@@ -49,44 +57,60 @@
4957
</dependency>
5058
</dependencies>
5159
</plugin>
60+
<plugin>
61+
<groupId>org.codehaus.mojo</groupId>
62+
<artifactId>exec-maven-plugin</artifactId>
63+
<version>1.6.0</version>
64+
<executions>
65+
<execution>
66+
<goals>
67+
<goal>java</goal>
68+
</goals>
69+
</execution>
70+
</executions>
71+
<configuration>
72+
<mainClass>com.baeldung.TestLauncher</mainClass>
73+
</configuration>
74+
</plugin>
5275
</plugins>
5376
</build>
5477

5578
<dependencies>
56-
57-
<dependency>
58-
<groupId>junit</groupId>
59-
<artifactId>junit</artifactId>
60-
<version>${junit4.version}</version>
61-
<scope>test</scope>
62-
</dependency>
63-
64-
<dependency>
65-
<groupId>org.junit.jupiter</groupId>
66-
<artifactId>junit-jupiter-api</artifactId>
67-
<version>${junit.jupiter.version}</version>
68-
<scope>test</scope>
69-
</dependency>
70-
7179
<dependency>
7280
<groupId>org.junit.jupiter</groupId>
7381
<artifactId>junit-jupiter-engine</artifactId>
7482
<version>${junit.jupiter.version}</version>
7583
<scope>test</scope>
7684
</dependency>
77-
7885
<dependency>
79-
<groupId>org.junit.platform</groupId>
80-
<artifactId>junit-platform-runner</artifactId>
81-
<version>${junit.platform.version}</version>
82-
<scope>test</scope>
83-
</dependency>
84-
85-
<!-- <dependency>
86-
<groupId>org.junit.vintage</groupId>
87-
<artifactId>junit-vintage-engine</artifactId>
88-
<version>${junit.vintage.version}</version>
89-
<scope>test</scope>
90-
</dependency> -->
86+
<groupId>org.junit.platform</groupId>
87+
<artifactId>junit-platform-runner</artifactId>
88+
<version>${junit.platform.version}</version>
89+
<scope>test</scope>
90+
</dependency>
91+
<dependency>
92+
<groupId>org.junit.vintage</groupId>
93+
<artifactId>junit-vintage-engine</artifactId>
94+
<version>${junit.vintage.version}</version>
95+
<scope>test</scope>
96+
</dependency>
97+
<dependency>
98+
<groupId>org.apache.logging.log4j</groupId>
99+
<artifactId>log4j-core</artifactId>
100+
<version>${log4j2.version}</version>
101+
</dependency>
102+
<dependency>
103+
<groupId>com.h2database</groupId>
104+
<artifactId>h2</artifactId>
105+
<version>${h2.version}</version>
106+
</dependency>
107+
<dependency>
108+
<groupId>junit</groupId>
109+
<artifactId>junit</artifactId>
110+
<version>${junit4.version}</version>
111+
<scope>test</scope>
112+
</dependency>
113+
91114
</dependencies>
115+
92116
</project>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.baeldung;
2+
3+
import java.sql.SQLException;
4+
5+
import org.apache.logging.log4j.Logger;
6+
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.api.extension.ExtendWith;
8+
9+
import com.baeldung.extensions.EmployeeDaoParameterResolver;
10+
import com.baeldung.extensions.EmployeeDatabaseSetupExtension;
11+
import com.baeldung.extensions.EnvironmentExtension;
12+
import com.baeldung.extensions.IgnoreFileNotFoundExceptionExtension;
13+
import com.baeldung.extensions.LoggingExtension;
14+
import com.baeldung.helpers.Employee;
15+
import com.baeldung.helpers.EmployeeJdbcDao;
16+
17+
import static org.junit.jupiter.api.Assertions.*;
18+
19+
@ExtendWith({ EnvironmentExtension.class, EmployeeDatabaseSetupExtension.class, EmployeeDaoParameterResolver.class })
20+
@ExtendWith(LoggingExtension.class)
21+
@ExtendWith(IgnoreFileNotFoundExceptionExtension.class)
22+
public class EmployeesTest {
23+
24+
private EmployeeJdbcDao employeeDao;
25+
26+
private Logger logger;
27+
28+
public EmployeesTest(EmployeeJdbcDao employeeDao) {
29+
this.employeeDao = employeeDao;
30+
}
31+
32+
@Test
33+
public void whenAddEmployee_thenGetEmployee() throws SQLException {
34+
Employee emp = new Employee(1, "john");
35+
employeeDao.add(emp);
36+
assertEquals(1, employeeDao.findAll().size());
37+
}
38+
39+
@Test
40+
public void whenGetEmployees_thenEmptyList() throws SQLException {
41+
assertEquals(0, employeeDao.findAll().size());
42+
}
43+
44+
public void setLogger(Logger logger) {
45+
this.logger = logger;
46+
}
47+
48+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.baeldung;
2+
3+
import org.junit.platform.launcher.LauncherDiscoveryRequest;
4+
import org.junit.platform.launcher.TestExecutionListener;
5+
import org.junit.platform.launcher.TestPlan;
6+
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
7+
import org.junit.platform.launcher.core.LauncherFactory;
8+
import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
9+
10+
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
11+
12+
import java.io.PrintWriter;
13+
14+
import org.junit.platform.launcher.Launcher;
15+
16+
public class TestLauncher {
17+
public static void main(String[] args) {
18+
19+
//@formatter:off
20+
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
21+
.selectors(selectClass("com.baeldung.EmployeesTest"))
22+
.configurationParameter("junit.conditions.deactivate", "com.baeldung.extensions.*")
23+
.configurationParameter("junit.extensions.autodetection.enabled", "true")
24+
.build();
25+
26+
//@formatter:on
27+
28+
TestPlan plan = LauncherFactory.create().discover(request);
29+
Launcher launcher = LauncherFactory.create();
30+
SummaryGeneratingListener summaryGeneratingListener = new SummaryGeneratingListener();
31+
launcher.execute(request, new TestExecutionListener[] { summaryGeneratingListener });
32+
launcher.execute(request);
33+
34+
summaryGeneratingListener.getSummary().printTo(new PrintWriter(System.out));
35+
36+
}
37+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.baeldung.extensions;
2+
3+
import org.junit.jupiter.api.extension.ExtensionContext;
4+
import org.junit.jupiter.api.extension.ParameterContext;
5+
import org.junit.jupiter.api.extension.ParameterResolutionException;
6+
import org.junit.jupiter.api.extension.ParameterResolver;
7+
8+
import com.baeldung.helpers.EmployeeJdbcDao;
9+
import com.baeldung.helpers.JdbcConnectionUtil;
10+
11+
public class EmployeeDaoParameterResolver implements ParameterResolver {
12+
13+
@Override
14+
public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
15+
return parameterContext.getParameter().getType().equals(EmployeeJdbcDao.class);
16+
}
17+
18+
@Override
19+
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
20+
return new EmployeeJdbcDao(JdbcConnectionUtil.getConnection());
21+
}
22+
23+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.baeldung.extensions;
2+
3+
import java.sql.Connection;
4+
import java.sql.SQLException;
5+
import java.sql.Savepoint;
6+
7+
import org.junit.jupiter.api.extension.AfterAllCallback;
8+
import org.junit.jupiter.api.extension.AfterEachCallback;
9+
import org.junit.jupiter.api.extension.BeforeAllCallback;
10+
import org.junit.jupiter.api.extension.BeforeEachCallback;
11+
import org.junit.jupiter.api.extension.ExtensionContext;
12+
13+
import com.baeldung.helpers.EmployeeJdbcDao;
14+
import com.baeldung.helpers.JdbcConnectionUtil;
15+
16+
public class EmployeeDatabaseSetupExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback {
17+
18+
private Connection con = JdbcConnectionUtil.getConnection();
19+
private EmployeeJdbcDao employeeDao = new EmployeeJdbcDao(con);
20+
private Savepoint savepoint;
21+
22+
@Override
23+
public void afterAll(ExtensionContext context) throws SQLException {
24+
if (con != null) {
25+
con.close();
26+
}
27+
}
28+
29+
@Override
30+
public void beforeAll(ExtensionContext context) throws SQLException {
31+
employeeDao.createTable();
32+
33+
}
34+
35+
@Override
36+
public void afterEach(ExtensionContext context) throws SQLException {
37+
con.rollback(savepoint);
38+
}
39+
40+
@Override
41+
public void beforeEach(ExtensionContext context) throws SQLException {
42+
con.setAutoCommit(false);
43+
savepoint = con.setSavepoint("before");
44+
}
45+
46+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.baeldung.extensions;
2+
3+
import java.io.IOException;
4+
import java.util.Properties;
5+
6+
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
7+
import org.junit.jupiter.api.extension.ExecutionCondition;
8+
import org.junit.jupiter.api.extension.ExtensionContext;
9+
10+
public class EnvironmentExtension implements ExecutionCondition {
11+
12+
@Override
13+
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
14+
Properties props = new Properties();
15+
16+
try {
17+
props.load(EnvironmentExtension.class.getResourceAsStream("application.properties"));
18+
String env = props.getProperty("env");
19+
if ("qa".equalsIgnoreCase(env)) {
20+
return ConditionEvaluationResult.disabled("Test disabled on QA environment");
21+
}
22+
} catch (IOException e) {
23+
e.printStackTrace();
24+
}
25+
return ConditionEvaluationResult.enabled("Test enabled on QA environment");
26+
}
27+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.baeldung.extensions;
2+
3+
import java.io.FileNotFoundException;
4+
5+
import org.apache.logging.log4j.LogManager;
6+
import org.apache.logging.log4j.Logger;
7+
import org.junit.jupiter.api.extension.ExtensionContext;
8+
import org.junit.jupiter.api.extension.TestExecutionExceptionHandler;
9+
10+
public class IgnoreFileNotFoundExceptionExtension implements TestExecutionExceptionHandler {
11+
12+
Logger logger = LogManager.getLogger(IgnoreFileNotFoundExceptionExtension.class);
13+
14+
@Override
15+
public void handleTestExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {
16+
17+
if (throwable instanceof FileNotFoundException) {
18+
logger.error("File not found:" + throwable.getMessage());
19+
return;
20+
}
21+
throw throwable;
22+
}
23+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.extensions;
2+
3+
import org.apache.logging.log4j.LogManager;
4+
import org.apache.logging.log4j.Logger;
5+
import org.junit.jupiter.api.extension.ExtensionContext;
6+
import org.junit.jupiter.api.extension.TestInstancePostProcessor;
7+
8+
public class LoggingExtension implements TestInstancePostProcessor {
9+
10+
@Override
11+
public void postProcessTestInstance(Object testInstance, ExtensionContext context) throws Exception {
12+
Logger logger = LogManager.getLogger(testInstance.getClass());
13+
testInstance.getClass().getMethod("setLogger", Logger.class).invoke(testInstance, logger);
14+
}
15+
16+
}

0 commit comments

Comments
 (0)