0

I have a piece of code with try-catch block:

 public static void writeExcelToFile(String outFileName, HSSFWorkbook workBook) throws IOException{
    File file = null;
    FileOutputStream fileOutputStream = null;
    try {
        file = getFileByFileName(outFileName);
        File parent = file.getParentFile();
        Path filePath = parent.toPath();
        if (Files.notExists(filePath) && !parent.mkdirs()) {
            throw new IOException("Couldn't create dir: " + parent);
        }
        fileOutputStream = new FileOutputStream(file);
        workBook.write(fileOutputStream);
    } catch (FileNotFoundException fileNotFoundException) {
        LOGGER.error("File path is invalid, file not found ", fileNotFoundException);
        throw fileNotFoundException;
    } catch (IOException ioException) {
        LOGGER.error("Exception occured while reading writing file ", ioException);
        throw ioException;
    } catch (Exception exception) {
        LOGGER.error("Exception occured ", exception);
        throw exception;
    } finally {
        if (fileOutputStream != null) {
            fileOutputStream.close();
        }
    }
    file.setWritable(true);
}

I have written the following Junit for the catch block:

//#1: FileNotFoundException
@Test(expected = java.io.FileNotFoundException.class)
public void testWriteExcelToFileException() throws IOException {
    PowerMockito.mockStatic(KnewtonCIExcelWriter.class);
    PowerMockito.doThrow(new java.io.FileNotFoundException()).when(KnewtonCIExcelWriter.class);
    KnewtonCIExcelWriter.writeExcelToFile(anyString(), anyObject());
}

//#2: IOException
@Test(expected = IOException.class)
public void testWriteExcelIOException() throws IOException {
    PowerMockito.mockStatic(KnewtonCIExcelWriter.class);
    PowerMockito.doThrow(new IOException()).when(KnewtonCIExcelWriter.class);
    KnewtonCIExcelWriter.writeExcelToFile(anyString(), anyObject());
}

//#3: Exception
@Test(expected = Exception.class)
public void testWriteExcelException() throws IOException {
    PowerMockito.mockStatic(KnewtonCIExcelWriter.class);
    PowerMockito.doThrow(new Exception()).when(KnewtonCIExcelWriter.class);
    KnewtonCIExcelWriter.writeExcelToFile(anyString(), anyObject());
}

However, only the last, #3 Junit passes. #1 and #2 gives java.lang.AssertionError: Expected exception: java.io.FileNotFoundException and java.lang.AssertionError: Expected exception: java.io.IOEXception.

Question: 1) How to get the #1 and #2 JUnit passing? 2) Am I catching the correct exceptions?

Divya Jose
  • 389
  • 1
  • 4
  • 21
  • Please read powermock documentation, `PowerMockito.doThrow(new Exception()).when(KnewtonCIExcelWriter.class);` this is missing a function name –  Feb 13 '17 at 15:55
  • 1
    Note: don't catch, log and rethrow exceptions. Log them or rethrow them; don't do both. – Andy Turner Feb 13 '17 at 15:57

1 Answers1

0

powermockito syntax on doThrow when should be

when(KnewtonCIExcelWriter.class, "your method", argument (you can user matcher));
Zeromus
  • 4,472
  • 8
  • 32
  • 40