diff --git a/testing-modules/mockito-4/pom.xml b/testing-modules/mockito-4/pom.xml index 519724f3b824..81fe2a6882c4 100644 --- a/testing-modules/mockito-4/pom.xml +++ b/testing-modules/mockito-4/pom.xml @@ -3,6 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + com.baeldung parent-modules @@ -17,17 +18,48 @@ 23 UTF-8 + + + + org.junit.jupiter + junit-jupiter + 5.10.0 + test + + + + org.mockito + mockito-core + 5.11.0 + test + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + org.apache.maven.plugins maven-compiler-plugin + 3.11.0 21 21 + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + - \ No newline at end of file + diff --git a/testing-modules/mockito-4/src/main/java/com/baeldung/mockingobjectproperties/MockingObjectProperties.java b/testing-modules/mockito-4/src/main/java/com/baeldung/mockingobjectproperties/MockingObjectProperties.java new file mode 100644 index 000000000000..0a77dbc0c6b8 --- /dev/null +++ b/testing-modules/mockito-4/src/main/java/com/baeldung/mockingobjectproperties/MockingObjectProperties.java @@ -0,0 +1,15 @@ +package com.baeldung.mockingobjectproperties; + +import javax.servlet.http.HttpServletRequest; + +public class MockingObjectProperties { + + public Object getSearchAttribute(HttpServletRequest request) { + return request.getAttribute("search"); + } + + public void printSearchAttribute(HttpServletRequest request) { + Object value = getSearchAttribute(request); + System.out.println("Search attribute: " + value); + } +} diff --git a/testing-modules/mockito-4/src/test/java/com/baeldung/mockingobjectproperties/MockingObjectPropertiesUnitTest.java b/testing-modules/mockito-4/src/test/java/com/baeldung/mockingobjectproperties/MockingObjectPropertiesUnitTest.java new file mode 100644 index 000000000000..f39233ade0f3 --- /dev/null +++ b/testing-modules/mockito-4/src/test/java/com/baeldung/mockingobjectproperties/MockingObjectPropertiesUnitTest.java @@ -0,0 +1,43 @@ +package com.baeldung.mockingobjectproperties; + +import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import org.junit.jupiter.api.Test; + +public class MockingObjectPropertiesUnitTest { + + @Test + void givenMockRequest_whenSimulatingDynamicAttributes_thenBehavesLikeRealObject() { + HttpServletRequest mockRequest = mock(HttpServletRequest.class); + Map attributes = new HashMap<>(); + + // Simulate internal state for getAttribute() + when(mockRequest.getAttribute(anyString())) + .thenAnswer(invocation -> attributes.get(invocation.getArgument(0))); + + // Intercept setAttribute() calls to store values + doAnswer(invocation -> { + attributes.put(invocation.getArgument(0), invocation.getArgument(1)); + return null; + }).when(mockRequest).setAttribute(anyString(), any()); + + // Use the main class + MockingObjectProperties helper = new MockingObjectProperties(); + + // Set and get attribute + mockRequest.setAttribute("search", "Mockito Example"); + Object value = helper.getSearchAttribute(mockRequest); + + // Assert the value is correctly retrieved + assertEquals("Mockito Example", value); + + // Verify interactions + verify(mockRequest).setAttribute("search", "Mockito Example"); + verify(mockRequest).getAttribute("search"); + verify(mockRequest, never()).getAttribute("nonexistent"); + } +}