junit モック化の使い方

単体テストではどこでもテストが出来る形でのテストとするため、モック(Mockito)を利
用する。

モック化パターン

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

モック対象種類 モックパターン
引数として渡すオブジェクト 通常モックパターン
テスト対象でnewしているオブジェクト
コンストラクタモックパターン
staticなオブジェクトのモック
staticオブジェクトモックパターン

通常モックパターン

1.モック化方法

-アノテーション(@Mock)を付け、モック化する。
– Mockito.mock(モック対象クラス)

2.モックの動き指定

・戻り値なしの場合:
Mockito.doNothing().when(mock).logging(any(), anyString());
 Exceptionの場合:doThrowを利用する
Mockito.doThrow(new ProvisionedThroughputExceededException(description)).when(cli
ent).putRecord(any());
・戻り値ありの場合:
Mockito.when(config.getRegion()).thenReturn(“ap-northeast-1”);
Exception発生の場合:thenThrowを利用する
※Exception発生時、モック対象が発生し得ない例外は設定できない

コンストラクタモックパターン

1.モック化方法

モック用変数の定義
VinHashRepositoryImpl mockVinHashGatewayImpl
MockedConstruction<VinHashRepositoryImpl mockedVinHashGatewayImpl;
モックの定義
各テストケースにて必要となる場合、テスト実行前に実行される@BeforeEachのメソッド内でモックの定義を行う。テスト実行後にcloseする必要があるため、テスト実行後に実行される@AfterEachのメソッド内でモックのCloseを指定する。

@BeforeEach
public void before() {
// DtcDataGatewayImpl
mockedVinHashGatewayImpl =
Mockito.mockConstruction(VinHashRepositoryImpl.class, (mock, context) -> {
mockVinHashGatewayImpl = mock;
Mockito.doNothing().when(mockVinHashGatewayImpl).save(any());
Mockito.when(mockVinHashGatewayImpl.isRegistered(any())).thenReturn(false);
});
}
@AfterEach
public void after() {
mockedVinHashGatewayImpl.close();
}

2.モックの動き指定

通常モックパターンと同じ。ただし、モック用変数定義の中で全ての動きを指定する必要あ
り。

staticモックパターン

1.モック化方法

mockStaticを利用する
Mockito.mockStatic(LocalDateTime.class);

2.モックの動き指定

通常モックパターンと同じ。
LocalDateTimeをモック化する場合の例:

// LocalDateTime
モック定義
LocalDateTime datetime = LocalDateTime.of(1977, 12, 24, 12, 34, 56,
tel:789000000);
mockedLocalDateTime = Mockito.mockStatic(LocalDateTime.class);
mockedLocalDateTime.when(LocalDateTime::now).thenReturn(datetime);

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス