diff --git a/patterns/hexagonal/pom.xml b/patterns/hexagonal/pom.xml
index 7f6cbf176b..4b8dfcfeb4 100644
--- a/patterns/hexagonal/pom.xml
+++ b/patterns/hexagonal/pom.xml
@@ -4,6 +4,22 @@
4.0.0
hexagonal
1.0
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 12
+ 12
+
+
+
+ maven-surefire-plugin
+ 2.22.2
+
+
+
hexagonal
A quick and practical example of Hexagonal Architecture in Java
@@ -14,4 +30,41 @@
../../parent-java
+
+ 12
+ 12
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.3.1
+ test
+
+
+ org.mockito
+ mockito-core
+ 2.21.0
+ test
+
+
+ org.junit.platform
+ junit-platform-runner
+ 1.2.0
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+ 5.2.0
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ 2.23.0
+ test
+
+
diff --git a/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/repository/MockWeatherRepositoryUnitTest.java b/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/repository/MockWeatherRepositoryUnitTest.java
new file mode 100644
index 0000000000..f8d0be5d8b
--- /dev/null
+++ b/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/repository/MockWeatherRepositoryUnitTest.java
@@ -0,0 +1,39 @@
+package com.baeldung.pattern.hexagonal.repository;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class MockWeatherRepositoryUnitTest {
+
+ private final WeatherRepository tested = new MockWeatherRepository();
+
+ @Test
+ void givenLocationClujNapoca_whenGetTemperature_thenExpect17() {
+ double result = tested.getTemperature("cluj-napoca");
+
+ assertEquals(17, result);
+ }
+
+ @Test
+ void givenLocationBucharest_whenGetTemperature_thenExpect22() {
+ double result = tested.getTemperature("bucharest");
+
+ assertEquals(22, result);
+ }
+
+ @Test
+ void givenLocationNewYork_whenGetTemperature_thenExpect15() {
+ double result = tested.getTemperature("new york");
+
+ assertEquals(15, result);
+ }
+
+ @Test
+ void givenLocationDefault_whenGetTemperature_thenExpect20() {
+ double result = tested.getTemperature("default");
+
+ assertEquals(20, result);
+ }
+
+}
\ No newline at end of file
diff --git a/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/repository/RepositoryFactoryUnitTest.java b/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/repository/RepositoryFactoryUnitTest.java
new file mode 100644
index 0000000000..9fc32e5268
--- /dev/null
+++ b/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/repository/RepositoryFactoryUnitTest.java
@@ -0,0 +1,14 @@
+package com.baeldung.pattern.hexagonal.repository;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class RepositoryFactoryUnitTest {
+ @Test
+ void whenGetMockWeatherRepository_thenExpectMockWeatherRepositoryInstance() {
+ WeatherRepository result = RepositoryFactory.getMockWeatherRepository();
+
+ assertTrue(result instanceof MockWeatherRepository);
+ }
+}
\ No newline at end of file
diff --git a/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/service/WeatherForecasterServiceUnitTest.java b/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/service/WeatherForecasterServiceUnitTest.java
new file mode 100644
index 0000000000..1959a815fb
--- /dev/null
+++ b/patterns/hexagonal/src/test/java/com/baeldung/pattern/hexagonal/service/WeatherForecasterServiceUnitTest.java
@@ -0,0 +1,39 @@
+package com.baeldung.pattern.hexagonal.service;
+
+import com.baeldung.pattern.hexagonal.repository.WeatherRepository;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.platform.runner.JUnitPlatform;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+@RunWith(JUnitPlatform.class)
+class WeatherForecasterServiceUnitTest {
+
+ @Mock
+ private WeatherRepository repository;
+ @InjectMocks
+ private WeatherForecasterService tested;
+
+ @Test
+ void givenLocation10_whenForecast_thenExpect10() {
+ when(repository.getTemperature("location")).thenReturn(10d);
+
+ double result = tested.forecast("location");
+ assertEquals(10d, result);
+ }
+
+ @Test
+ void givenNullLocation_whenForecast_thenExpectEmptyString() {
+ when(repository.getTemperature("")).thenReturn(10d);
+
+ double result = tested.forecast(null);
+ assertEquals(10d, result);
+ }
+}
\ No newline at end of file