社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Mockito 取得したオブジェクトのメソッドの戻り値をモックする

@Test
public void testGetMemberInfoWithNestedObjectMock() {
 Member member = mock(Member.class, RETURNS_DEEP_STUBS);  // 1
	
 when(member.getPointCard().getPoint()).thenReturn(3000L);  // 2
	
 assertThat(member.getPointCard().getPoint(), is(3000L));  //3
}

1. Member クラスのモックオブジェクトを作成する
このとき、第2引数として RETURNS_DEEP_STUBS を指定しています。

2. モックの振る舞いを定義する
具体的には、まず member.getPointCard() で PointCard というオブジェクトが取得されると仮定しています。
そして、PointCard の getPoint() メソッドを呼び出したとき、3000L を返却するように定義しています。

3. 検証する
定義したモックの振る舞い通りに値が返却されていることを確認しています。

所感

実は今まで、RETURNS_DEEP_STUBS を使ったことなかったですが、ネストしたオブジェクトのメソッドの戻り値を任意に設定できるのは、とても便利だと思います。
もし、RETURNS_DEEP_STUBS を指定していなかったら、NullPointerException がスローされます。