概要
FileSystemProvider.createDirectoryでIOExceptionをスローするためのモックの値の設定
今回は業務で単体テストを作成中にFilesクラスのcreateDirectorysメソッドでIOExceptionが発生した際の処理をテストするためにモックを使用してIOExceptionを発生させる方法をサンプルと合わせてあげたいと思います。
モック化するクラスFilesクラスのcreateDirectoryメソッドでIOExceptionを発生させるために以下のクラスをモック化する。
モック化するクラス | 理由 |
---|---|
Path | Files.createDirectorysの引数の型のため |
FileSystem | Path.getFileSystemの戻り値の型のため |
FileSystemProvider | 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に設定。
- 閲覧数 2892
コメントを追加