Mockitoはクラスの偽のオブジェクトを作ってくれます。

when().thenReturn()を利用して、publicメソッドの戻る値を指定できます。

1
2
3
4
5
6
@Test
public void add_with_when() {
List<String> mockedList = mock(List.class);
when(mockedList.size()).thenReturn(10);
assertThat(mockedList.size(), is(10));
}

ここは1つ注意しなければならないことがあります。モックで作成したオブジェクトの全てのメソッドが偽物になります。下記のadd()はモックされたため、リストに追加する処理はありません。

1
2
3
4
5
6
7
@Test
public void add_without_when() {
List<String> mockedList = mock(List.class);
mockedList.add("A");
mockedList.add("B");
mockedList.add("C");
assertThat(mockedList.size(), is(0));

Answers.CALL_REAL_METHODSを利用すれば、本物のメソッドを呼べます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Test
public void call_real_method() {
Employee employee = mock(Employee.class, Answers.CALLS_REAL_METHODS);
employee.setName(new Name("Alice"));
assertThat(employee.getName(), is("Alice"));
}

@Test
public void call_real_method_with_when() {
Employee employee = mock(Employee.class, Answers.CALLS_REAL_METHODS);
employee.setName(new Name("Alice"));
when(employee.getName()).thenReturn(new Name("Bob"));
assertThat(employee.getName(), is("Bob"));
}