Skip to content

Commit e30df69

Browse files
Merge pull request #18381 from maenolis/BAEL-9179
Mockito stubbing setter getter initial commit
2 parents 3733d46 + 1f64a99 commit e30df69

File tree

4 files changed

+189
-0
lines changed

4 files changed

+189
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.gettersetter;
2+
3+
import java.util.function.Consumer;
4+
import java.util.function.Supplier;
5+
6+
public class ExampleService {
7+
8+
public <T> T getField(Supplier<T> getter) {
9+
return getter.get();
10+
}
11+
12+
public <T> void setField(Consumer<T> setter, T value) {
13+
setter.accept(value);
14+
}
15+
16+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.baeldung.gettersetter;
2+
3+
public class NonSimpleClass {
4+
5+
private Long id;
6+
private String name;
7+
private String superComplicatedField;
8+
9+
public NonSimpleClass(Long id, String name, String superComplicatedField) {
10+
this.id = id;
11+
this.name = name;
12+
this.superComplicatedField = superComplicatedField;
13+
}
14+
15+
public NonSimpleClass() {
16+
}
17+
18+
public Long getId() {
19+
return id;
20+
}
21+
22+
public void setId(Long id) {
23+
this.id = id;
24+
}
25+
26+
public String getName() {
27+
return name;
28+
}
29+
30+
public void setName(String name) {
31+
this.name = name;
32+
}
33+
34+
public String getSuperComplicatedField() {
35+
return superComplicatedField;
36+
}
37+
38+
public void setSuperComplicatedField(String superComplicatedField) {
39+
this.superComplicatedField = superComplicatedField;
40+
}
41+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.baeldung.gettersetter;
2+
3+
public class SimpleClass {
4+
5+
private Long id;
6+
7+
private String name;
8+
9+
public SimpleClass(Long id, String name) {
10+
this.id = id;
11+
this.name = name;
12+
}
13+
14+
public SimpleClass() {
15+
}
16+
17+
public Long getId() {
18+
return id;
19+
}
20+
21+
public void setId(Long id) {
22+
this.id = id;
23+
}
24+
25+
public String getName() {
26+
return name;
27+
}
28+
29+
public void setName(String name) {
30+
this.name = name;
31+
}
32+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.baeldung.gettersetter;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.mockito.ArgumentMatchers.anyLong;
5+
import static org.mockito.ArgumentMatchers.anyString;
6+
import static org.mockito.ArgumentMatchers.eq;
7+
import static org.mockito.Mockito.doAnswer;
8+
import static org.mockito.Mockito.doNothing;
9+
import static org.mockito.Mockito.mock;
10+
import static org.mockito.Mockito.verify;
11+
import static org.mockito.Mockito.when;
12+
13+
import org.junit.Test;
14+
import org.mockito.stubbing.Answer;
15+
16+
public class ExampleServiceTest {
17+
18+
@Test
19+
public void givenMockedSimpleClass_whenInvokingSettersGetters_thenInvokeMockedSettersGetters() {
20+
Long mockId = 12L;
21+
String mockName = "I'm 12";
22+
SimpleClass simpleMock = mock(SimpleClass.class);
23+
when(simpleMock.getId()).thenReturn(mockId);
24+
when(simpleMock.getName()).thenReturn(mockName);
25+
doNothing().when(simpleMock)
26+
.setId(anyLong());
27+
doNothing().when(simpleMock)
28+
.setName(anyString());
29+
ExampleService srv = new ExampleService();
30+
srv.setField(simpleMock::setId, 11L);
31+
srv.setField(simpleMock::setName, "I'm 11");
32+
assertEquals(srv.getField(simpleMock::getId), mockId);
33+
assertEquals(srv.getField(simpleMock::getName), mockName);
34+
verify(simpleMock).getId();
35+
verify(simpleMock).getName();
36+
verify(simpleMock).setId(eq(11L));
37+
verify(simpleMock).setName(eq("I'm 11"));
38+
}
39+
40+
@Test
41+
public void givenActualSimpleClass_whenInvokingSettersGetters_thenInvokeActualSettersGetters() {
42+
Long id = 1L;
43+
String name = "I'm 1";
44+
SimpleClass simple = new SimpleClass(id, name);
45+
ExampleService srv = new ExampleService();
46+
srv.setField(simple::setId, 2L);
47+
srv.setField(simple::setName, "I'm 2");
48+
assertEquals(srv.getField(simple::getId), simple.getId());
49+
assertEquals(srv.getField(simple::getName), simple.getName());
50+
}
51+
52+
@Test
53+
public void givenNonSimpleClass_whenInvokingGetName_thenReturnMockedName() {
54+
NonSimpleClass nonSimple = mock(NonSimpleClass.class);
55+
when(nonSimple.getName()).thenReturn("Meredith");
56+
ExampleService srv = new ExampleService();
57+
assertEquals(srv.getField(nonSimple::getName), "Meredith");
58+
verify(nonSimple).getName();
59+
}
60+
61+
static class Wrapper<T> {
62+
63+
private T value;
64+
65+
Wrapper(T value) {
66+
this.value = value;
67+
}
68+
69+
Wrapper(Class<T> value) {
70+
71+
}
72+
73+
T get() {
74+
return value;
75+
}
76+
77+
void set(T value) {
78+
this.value = value;
79+
}
80+
81+
}
82+
83+
@Test
84+
public void givenNonSimpleClass_whenInvokingGetName_thenReturnTheLatestNameSet() {
85+
Wrapper<String> nameWrapper = new Wrapper<>(String.class);
86+
NonSimpleClass nonSimple = mock(NonSimpleClass.class);
87+
when(nonSimple.getName()).thenAnswer((Answer<String>) invocationOnMock -> nameWrapper.get());
88+
doAnswer(invocation -> {
89+
nameWrapper.set(invocation.getArgument(0));
90+
return null;
91+
}).when(nonSimple)
92+
.setName(anyString());
93+
ExampleService srv = new ExampleService();
94+
srv.setField(nonSimple::setName, "John");
95+
assertEquals(srv.getField(nonSimple::getName), "John");
96+
srv.setField(nonSimple::setName, "Nick");
97+
assertEquals(srv.getField(nonSimple::getName), "Nick");
98+
}
99+
100+
}

0 commit comments

Comments
 (0)