diff --git a/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/ExampleService.java b/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/ExampleService.java new file mode 100644 index 000000000000..7e067face4f9 --- /dev/null +++ b/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/ExampleService.java @@ -0,0 +1,16 @@ +package com.baeldung.gettersetter; + +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class ExampleService { + + public T getField(Supplier getter) { + return getter.get(); + } + + public void setField(Consumer setter, T value) { + setter.accept(value); + } + +} diff --git a/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/NonSimpleClass.java b/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/NonSimpleClass.java new file mode 100644 index 000000000000..a1421f2665c5 --- /dev/null +++ b/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/NonSimpleClass.java @@ -0,0 +1,41 @@ +package com.baeldung.gettersetter; + +public class NonSimpleClass { + + private Long id; + private String name; + private String superComplicatedField; + + public NonSimpleClass(Long id, String name, String superComplicatedField) { + this.id = id; + this.name = name; + this.superComplicatedField = superComplicatedField; + } + + public NonSimpleClass() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSuperComplicatedField() { + return superComplicatedField; + } + + public void setSuperComplicatedField(String superComplicatedField) { + this.superComplicatedField = superComplicatedField; + } +} diff --git a/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/SimpleClass.java b/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/SimpleClass.java new file mode 100644 index 000000000000..4333f237d44a --- /dev/null +++ b/testing-modules/mockito-4/src/main/java/com/baeldung/gettersetter/SimpleClass.java @@ -0,0 +1,32 @@ +package com.baeldung.gettersetter; + +public class SimpleClass { + + private Long id; + + private String name; + + public SimpleClass(Long id, String name) { + this.id = id; + this.name = name; + } + + public SimpleClass() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/testing-modules/mockito-4/src/test/java/com/baeldung/gettersetter/ExampleServiceTest.java b/testing-modules/mockito-4/src/test/java/com/baeldung/gettersetter/ExampleServiceTest.java new file mode 100644 index 000000000000..2b544e9d37ad --- /dev/null +++ b/testing-modules/mockito-4/src/test/java/com/baeldung/gettersetter/ExampleServiceTest.java @@ -0,0 +1,100 @@ +package com.baeldung.gettersetter; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Test; +import org.mockito.stubbing.Answer; + +public class ExampleServiceTest { + + @Test + public void givenMockedSimpleClass_whenInvokingSettersGetters_thenInvokeMockedSettersGetters() { + Long mockId = 12L; + String mockName = "I'm 12"; + SimpleClass simpleMock = mock(SimpleClass.class); + when(simpleMock.getId()).thenReturn(mockId); + when(simpleMock.getName()).thenReturn(mockName); + doNothing().when(simpleMock) + .setId(anyLong()); + doNothing().when(simpleMock) + .setName(anyString()); + ExampleService srv = new ExampleService(); + srv.setField(simpleMock::setId, 11L); + srv.setField(simpleMock::setName, "I'm 11"); + assertEquals(srv.getField(simpleMock::getId), mockId); + assertEquals(srv.getField(simpleMock::getName), mockName); + verify(simpleMock).getId(); + verify(simpleMock).getName(); + verify(simpleMock).setId(eq(11L)); + verify(simpleMock).setName(eq("I'm 11")); + } + + @Test + public void givenActualSimpleClass_whenInvokingSettersGetters_thenInvokeActualSettersGetters() { + Long id = 1L; + String name = "I'm 1"; + SimpleClass simple = new SimpleClass(id, name); + ExampleService srv = new ExampleService(); + srv.setField(simple::setId, 2L); + srv.setField(simple::setName, "I'm 2"); + assertEquals(srv.getField(simple::getId), simple.getId()); + assertEquals(srv.getField(simple::getName), simple.getName()); + } + + @Test + public void givenNonSimpleClass_whenInvokingGetName_thenReturnMockedName() { + NonSimpleClass nonSimple = mock(NonSimpleClass.class); + when(nonSimple.getName()).thenReturn("Meredith"); + ExampleService srv = new ExampleService(); + assertEquals(srv.getField(nonSimple::getName), "Meredith"); + verify(nonSimple).getName(); + } + + static class Wrapper { + + private T value; + + Wrapper(T value) { + this.value = value; + } + + Wrapper(Class value) { + + } + + T get() { + return value; + } + + void set(T value) { + this.value = value; + } + + } + + @Test + public void givenNonSimpleClass_whenInvokingGetName_thenReturnTheLatestNameSet() { + Wrapper nameWrapper = new Wrapper<>(String.class); + NonSimpleClass nonSimple = mock(NonSimpleClass.class); + when(nonSimple.getName()).thenAnswer((Answer) invocationOnMock -> nameWrapper.get()); + doAnswer(invocation -> { + nameWrapper.set(invocation.getArgument(0)); + return null; + }).when(nonSimple) + .setName(anyString()); + ExampleService srv = new ExampleService(); + srv.setField(nonSimple::setName, "John"); + assertEquals(srv.getField(nonSimple::getName), "John"); + srv.setField(nonSimple::setName, "Nick"); + assertEquals(srv.getField(nonSimple::getName), "Nick"); + } + +}