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"); + } +}