Junit的与异常
问题描述:
我有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?
答
powermockito语法时,应
when(KnewtonCIExcelWriter.class, "your method", argument (you can user matcher));
请仔细阅读powermock文档,'PowerMockito.doThrow(新的异常())时(KnewtonCIExcelWriter.class);'这是缺少函数名 – 2017-02-13 15:55:56
注意:不要捕获,记录和重新抛出异常。记录它们或重新抛出它们;不要这样做。 –