From 652fe88bdf31fcf5792bbbaf1dbb38dfb1c7ddc5 Mon Sep 17 00:00:00 2001 From: francis-n440 Date: Mon, 27 Oct 2025 22:38:46 +0300 Subject: [PATCH] BAEL-9352: Mocking Object Properties With Mockito --- .../MockingObjectProperties.java | 15 +++++++ .../MockingObjectPropertiesUnitTest.java | 43 +++++++++++++++++++ 2 files changed, 58 insertions(+) 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/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"); + } +}