2017-02-13 59 views
0

我有try-catch块的一段代码:Junit的与异常

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); 
} 

我写了下面的JUnit catch块:

//#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()); 
} 

然而,只有最后,# 3 Junit通行证。 #1和#2给出java.lang.AssertionError:期望的异常:java.io.FileNotFoundException和java.lang.AssertionError:预期的异常:java.io.IOEXception。在doThrow

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

+0

请仔细阅读powermock文档,'PowerMockito.doThrow(新的异常())时(KnewtonCIExcelWriter.class);'这是缺少函数名 – 2017-02-13 15:55:56

+1

注意:不要捕获,记录和重新抛出异常。记录它们或重新抛出它们;不要这样做。 –

回答

0

powermockito语法时,应

when(KnewtonCIExcelWriter.class, "your method", argument (you can user matcher));