From b3e746abcd9cc98ced0f7f3a41d43150f425453c Mon Sep 17 00:00:00 2001 From: francis-n440 Date: Wed, 29 Oct 2025 16:06:32 +0300 Subject: [PATCH] BAEL-9352: Mocking Object Properties With Mockito --- testing-modules/mockito-4/pom.xml | 17 ++++- .../MockingObjectProperties.java | 15 ++++ .../MockingObjectPropertiesUnitTest.java | 73 +++++++++++++++++++ 3 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 testing-modules/mockito-4/src/main/java/com/baeldung/mockingobjectproperties/MockingObjectProperties.java create mode 100644 testing-modules/mockito-4/src/test/java/com/baeldung/mockingobjectproperties/MockingObjectPropertiesUnitTest.java diff --git a/testing-modules/mockito-4/pom.xml b/testing-modules/mockito-4/pom.xml index 519724f3b824..1d822ce9c82a 100644 --- a/testing-modules/mockito-4/pom.xml +++ b/testing-modules/mockito-4/pom.xml @@ -16,18 +16,29 @@ 23 23 UTF-8 + 21 + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + 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"); + } +}