diff --git a/testing-modules/easymock/pom.xml b/testing-modules/easymock/pom.xml
new file mode 100644
index 0000000000..2b16dd3a1f
--- /dev/null
+++ b/testing-modules/easymock/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ testing-modules
+ 1.0.0-SNAPSHOT
+
+ easymock
+ easymock
+ http://maven.apache.org
+
+ UTF-8
+
+
+
+ org.easymock
+ easymock
+ 4.0.2
+ test
+
+
+
diff --git a/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/ForecastProcessor.java b/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/ForecastProcessor.java
new file mode 100644
index 0000000000..482e985e5b
--- /dev/null
+++ b/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/ForecastProcessor.java
@@ -0,0 +1,28 @@
+package com.baeldung.testing.easymock;
+
+import java.math.BigDecimal;
+
+public class ForecastProcessor {
+ private WeatherService weatherService;
+
+ public BigDecimal getMaximumTemperature(String locationName) {
+
+ Location location = new Location(locationName);
+
+ try {
+ weatherService.populateTemperature(location);
+ } catch (ServiceUnavailableException e) {
+ return null;
+ }
+
+ return location.getMaximumTemparature();
+ }
+
+ public WeatherService getWeatherService() {
+ return weatherService;
+ }
+
+ public void setWeatherService(WeatherService weatherService) {
+ this.weatherService = weatherService;
+ }
+}
diff --git a/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/Location.java b/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/Location.java
new file mode 100644
index 0000000000..5f318acd5c
--- /dev/null
+++ b/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/Location.java
@@ -0,0 +1,33 @@
+package com.baeldung.testing.easymock;
+
+import java.math.BigDecimal;
+
+public class Location {
+ private String name;
+ private BigDecimal minimumTemperature;
+ private BigDecimal maximumTemparature;
+
+ public Location(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public BigDecimal getMinimumTemperature() {
+ return minimumTemperature;
+ }
+
+ public void setMinimumTemperature(BigDecimal minimumTemperature) {
+ this.minimumTemperature = minimumTemperature;
+ }
+
+ public BigDecimal getMaximumTemparature() {
+ return maximumTemparature;
+ }
+
+ public void setMaximumTemparature(BigDecimal maximumTemparature) {
+ this.maximumTemparature = maximumTemparature;
+ }
+}
diff --git a/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/ServiceUnavailableException.java b/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/ServiceUnavailableException.java
new file mode 100644
index 0000000000..abab4bdee8
--- /dev/null
+++ b/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/ServiceUnavailableException.java
@@ -0,0 +1,7 @@
+package com.baeldung.testing.easymock;
+
+public class ServiceUnavailableException extends Exception {
+
+ private static final long serialVersionUID = 6961151537340723535L;
+
+}
diff --git a/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/WeatherService.java b/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/WeatherService.java
new file mode 100644
index 0000000000..1c6b11b17b
--- /dev/null
+++ b/testing-modules/easymock/src/main/java/com/baeldung/testing/easymock/WeatherService.java
@@ -0,0 +1,5 @@
+package com.baeldung.testing.easymock;
+
+public interface WeatherService {
+ void populateTemperature(Location location) throws ServiceUnavailableException;
+}
diff --git a/testing-modules/easymock/src/test/java/com/baeldung/testing/easymock/ForecastProcessorUnitTest.java b/testing-modules/easymock/src/test/java/com/baeldung/testing/easymock/ForecastProcessorUnitTest.java
new file mode 100644
index 0000000000..fa8fa847ae
--- /dev/null
+++ b/testing-modules/easymock/src/test/java/com/baeldung/testing/easymock/ForecastProcessorUnitTest.java
@@ -0,0 +1,49 @@
+package com.baeldung.testing.easymock;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+import java.math.BigDecimal;
+
+import org.easymock.EasyMock;
+import org.easymock.EasyMockRule;
+import org.easymock.Mock;
+import org.easymock.TestSubject;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class ForecastProcessorUnitTest {
+ private static int MAX_TEMP = 90;
+
+ @Rule
+ public EasyMockRule rule = new EasyMockRule(this);
+
+ @TestSubject
+ private ForecastProcessor forecastProcessor = new ForecastProcessor();
+
+ @Mock
+ private WeatherService mockWeatherService;
+
+ @Before
+ public void setUp() {
+ forecastProcessor.setWeatherService(mockWeatherService);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void givenLocationName_whenWeatherServicePopulatesTemperatures_thenMaxTempReturned() throws ServiceUnavailableException {
+ mockWeatherService.populateTemperature(EasyMock.anyObject(Location.class));
+ EasyMock.expectLastCall()
+ .andAnswer(() -> {
+ Location passedLocation = (Location) EasyMock.getCurrentArguments()[0];
+ passedLocation.setMaximumTemparature(new BigDecimal(MAX_TEMP));
+ passedLocation.setMinimumTemperature(new BigDecimal(MAX_TEMP - 10));
+ return null;
+ });
+ EasyMock.replay(mockWeatherService);
+ BigDecimal maxTemperature = forecastProcessor.getMaximumTemperature("New York");
+ EasyMock.verify(mockWeatherService);
+ assertThat(maxTemperature, equalTo(new BigDecimal(MAX_TEMP)));
+ }
+}
diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml
index 95a19c2557..bc6e23a6b7 100644
--- a/testing-modules/pom.xml
+++ b/testing-modules/pom.xml
@@ -33,6 +33,7 @@
testing
testng
junit-5-basics
+ easymock
junit-5-advanced