@Test
public void testCopyFile08() throws Exception {

    // 引数の設定
    String classFileName = this.getClass().getSimpleName() + ".class";
    URL url = this.getClass().getResource(classFileName);
    String directoryPath = url.getPath().substring(0,
            url.getPath().length() - classFileName.length());
    String srcFile = null;
    String newFile = directoryPath + "testCopyFile08_new.txt";
    // 前提条件の設定
    Field field = FileUtility.class.getDeclaredField("checkFileExist");
    field.setAccessible(true);
    field.set(FileUtility.class, true);        
    // テスト対象ファイルを初期化する。
    File testNewFile = new File(newFile);
    testNewFile.delete();
    testNewFile.createNewFile();
    IOException exception = new IOException("TEST");
    FileLock fileLock = PowerMockito.mock(FileLock.class, Mockito.CALLS_REAL_METHODS);
    Mockito.doThrow(exception).when(fileLock).release();
    FileChannel fileChannel = PowerMockito.mock(FileChannel.class, Mockito.CALLS_REAL_METHODS);
    Mockito.doNothing().when(fileChannel).close(); // final method
    Mockito.when(fileChannel.lock()).thenReturn(fileLock);
    FileInputStream fis = Mockito.mock(FileInputStream.class, Mockito.RETURNS_DEFAULTS);
    Mockito.when(fis.getChannel()).thenReturn(fileChannel);
    PowerMockito.spy(FileInputStream.class);
    PowerMockito.whenNew(FileInputStream.class).withAnyArguments().thenReturn(fis);
    FileWriter testNewFileFileWriter = null;
    BufferedReader postReader = null;
    try {
        testNewFileFileWriter = new FileWriter(testNewFile);
        testNewFileFileWriter.write("testCopyFile08_new.txtデータ");
        testNewFileFileWriter.flush();
        testNewFileFileWriter.close();
        PowerMockito.mockStatic(FileUtility.class, Mockito.CALLS_REAL_METHODS);
        // テスト実施
        FileUtility.copyFile(srcFile, newFile);
        fail("FileExceptionが発生しませんでした。失敗です。");
    } catch (FileException e) {
        // 例外の確認
        assertTrue(FileException.class.isAssignableFrom(e.getClass()));
        assertEquals("File path is not set.", e.getMessage());
        assertNull(e.getFileName());
        // 状態変化の確認
        PowerMockito.verifyPrivate(FileUtility.class).invoke("checkAbsolutePath", srcFile);
        // コピー先のファイル内容確認
        // FileLock#release()時にIOExceptionをスローさせるため、このロックを持つFileChannel及び
        // FileInputStreamをモック化しているため、確認不可。
        //File resultFile = new File(newFile);
        //assertTrue(resultFile.exists());
        //postReader = new BufferedReader(new InputStreamReader(
        //        new FileInputStream(resultFile)));
        //assertTrue(postReader.ready());
        //String expectationResultData = "testCopyFile08_new.txtデータ";
        //String data = "";
        //for (int i = 0; i < expectationResultData.length(); i++) {
        //    assertTrue(i + "回目の判定で失敗しました。", postReader.ready());
        //    data += (char) postReader.read();
        //}
        //assertEquals(expectationResultData, data);
        //assertFalse(postReader.ready());
    } finally {
        if (testNewFileFileWriter != null) {
            testNewFileFileWriter.close();
        }
        if (postReader != null) {
            postReader.close();
        }
        // テスト後ファイルを削除
        File file = new File(newFile);
        file.delete();
    }
}