diff --git a/testing-modules/mockito-4/pom.xml b/testing-modules/mockito-4/pom.xml index 519724f3b824..0b624a19a12d 100644 --- a/testing-modules/mockito-4/pom.xml +++ b/testing-modules/mockito-4/pom.xml @@ -13,8 +13,9 @@ mockito-4 - 23 - 23 + 21 + ${java.version} + ${java.version} UTF-8 @@ -23,11 +24,11 @@ org.apache.maven.plugins maven-compiler-plugin - 21 - 21 + ${java.version} + ${java.version} - \ 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..b038a29ce338 --- /dev/null +++ b/testing-modules/mockito-4/src/test/java/com/baeldung/mockingobjectproperties/MockingObjectPropertiesUnitTest.java @@ -0,0 +1,73 @@ +package com.baeldung.mockingobjectproperties; + +import org.junit.jupiter.api.Test; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.any; + +public class MockingObjectPropertiesUnitTest { + + @Test + void givenMockRequest_whenUsedWithoutStubbing_thenReturnsNull() { + HttpServletRequest mockRequest = mock(HttpServletRequest.class); + mockRequest.setAttribute("search", "Mockito Example"); + + MockingObjectProperties helper = new MockingObjectProperties(); + Object value = helper.getSearchAttribute(mockRequest); + + assertNull(value, "Expected null because mock does not retain state"); + } + + @Test + void givenMockRequest_whenStubbedProperly_thenReturnsExpectedValue() { + HttpServletRequest mockRequest = mock(HttpServletRequest.class); + when(mockRequest.getAttribute("search")) + .thenReturn("Mockito Example"); + + MockingObjectProperties helper = new MockingObjectProperties(); + Object value = helper.getSearchAttribute(mockRequest); + + assertEquals("Mockito Example", value); + } + + @Test + void givenMockRequest_whenSimulatingDynamicAttributes_thenBehavesLikeRealObject() { + HttpServletRequest mockRequest = mock(HttpServletRequest.class); + Map attributes = new HashMap<>(); + + when(mockRequest.getAttribute(anyString())) + .thenAnswer(invocation -> attributes.get(invocation.getArgument(0))); + + doAnswer(invocation -> { + attributes.put(invocation.getArgument(0), invocation.getArgument(1)); + return null; + }).when(mockRequest).setAttribute(anyString(), any()); + + MockingObjectProperties helper = new MockingObjectProperties(); + + mockRequest.setAttribute("search", "Mockito Example"); + Object value = helper.getSearchAttribute(mockRequest); + + assertEquals("Mockito Example", value); + } + + @Test + void givenMockRequest_whenVerifyingInteractions_thenWorksAsExpected() { + HttpServletRequest mockRequest = mock(HttpServletRequest.class); + + mockRequest.setAttribute("search", "Mockito Example"); + mockRequest.getAttribute("search"); + + verify(mockRequest) + .setAttribute("search", "Mockito Example"); + verify(mockRequest) + .getAttribute("search"); + verify(mockRequest, never()) + .getAttribute("nonexistent"); + } +}