FilesクラスのcreateDirectorysメソッドでIOExceptionをモックを使用して発生させる方法

  •  
 
yokoe に投稿

タグ

概要

今回は業務で単体テストを作成中にFilesクラスのcreateDirectorysメソッドでIOExceptionが発生した際の処理をテストするためにモックを使用してIOExceptionを発生させる方法をサンプルと合わせてあげたいと思います。

モック化するクラス

FilesクラスのcreateDirectoryメソッドでIOExceptionを発生させるために以下のクラスをモック化する。

モック化するクラス 理由
Path Files.createDirectorysの引数の型のため
FileSystem Path.getFileSystemの戻り値の型のため
FileSystemProvider FileSystemProvider.createDirectoryでIOExceptionを発生させるため
FileSystemProvider.createDirectoryでIOExceptionをスローするためのモックの値の設定

IOExceptionをスローするためのモックの値の設定方法を以下のサンプルで示す。

        // mockの初期化
        Path mockPath = mock(Path.class);
        FileSystem mockFileSystem = mock(FileSystem.class);
        FileSystemProvider mockFileSystemProvider = mock(FileSystemProvider.class);

        // mockの戻り値を設定
        when(mockPath.getFileSystem()).thenReturn(mockFileSystem);<!-- 1 -->
        when(mockFileSystem.provider()).thenReturn(mockFileSystemProvider);<!-- 2 -->
        // IOExceptionを発生するよう設定
        doThrow(new IOException()).when(mockFileSystemProvider).createDirectory(any(), any());<!-- 3 -->
        when(mockPath.getParent()).thenReturn(null);<!-- 4 -->
        when(mockPath.toAbsolutePath()).thenReturn(mockPath);<!-- 5 -->
  • 1,2:FilesクラスのcreateDirectoryメソッドが呼ばれた際に呼び出されるメソッドcreateAndCheckIsDirectoryメソッドでさらに呼び出されるcreateDirectoryで呼び出されるFiles.provider(Path)メソッドの戻り値を設定。
  • 3:FileSystemProvider.createDirectory()が呼び出された際IOExceptionを投げるよう設定。
  • 4,5:FilesクラスのcreateDirectorysメソッドでPathクラスの値を取得している処理の設定。条件分岐時にすべてfalseになるようnullに設定。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。