- 開発技術
junitモック化の使い方
- #Java

単体テストではどこでもテストが出来る形でのテストとするため、モック(Mockito)を利用する
モック化パターン
モック対象種類 |
モックパターン |
引数として渡すオブジェクト |
通常モックパターン |
テスト対象でnewしているオブジェクト |
コンストラクタモックパターン |
staticなオブジェクトのモック |
staticオブジェクトモックパターン |
通常モックパターン
- モック化方法
アノテーション(@Mock)を付け、モック化する。
Mockito.mock(モック対象クラス) -
モックの動き指定
戻り値なしの場合:Mockito.doNothing().when(mock).logging(any(), anyString());
Exceptionの場合:doThrowを利用するMockito.doThrow(new ProvisionedThroughputExceededException(description)).when(client).putRecord(any());
-
戻り値ありの場合:Mockito.when(config.getRegion()).thenReturn(“ap-northeast-1”)
Exception発生の場合:thenThrowを利用する※Exception発生時、モック対象が発生し得ない例外は設定できない
コンストラクタモックパターン
- モック化方法
モック用変数の定義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(); }
- モックの動き指定
通常モックパターンと同じ。ただし、モック用変数定義の中で全ての動きを指定する必要あり。
staticモックパターン
- モック化方法
mockStaticを利用するMockito.mockStatic(LocalDateTime.class);
- モックの動き指定
通常モックパターンと同じ。
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);