我想请求帮助我如何在junit测试中捕获ioexception,以测试我的代码在发生错误时是否抛出正确的异常。
这是我的主要代码:
public void LogHostStream(String v_strText) {
Date dtToday = new Date();
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
String date = DATE_FORMAT.format(dtToday);
SimpleDateFormat FILE_DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
String filedate = FILE_DATE_FORMAT.format(dtToday);
IConfiguration cfgHandler = ConfigurationFactory.getConfigHandle();
String logFileName = cfgHandler.GetXMLValue("config.xml", "/config/log/host_logs");
String outText = String.format("%s \n %s \n", date, v_strText);
String fileName = logFileName + "_" + filedate + ".txt";
try (FileWriter fw = new FileWriter(fileName, true);
BufferedWriter bw = new BufferedWriter(fw);) {
bw.write(outText);
} catch (IOException e) {
e.printStackTrace();
}
这是我的junit:
@Test(expected = IOException.class)
public void testLogHostStreamThrowsIOException() throws IOException {
logger.LogHostStream("");
String logFileName = cfgHandler.GetXMLValue("ocomw_config.xml", "/config/log/host_logs");
FileWriter fWriter = new FileWriter(logFileName, true);
BufferedWriter bw = new BufferedWriter(fWriter);
Assertions.assertThrows(IOException.class, () -> new BufferedWriter(bw));
}
我想我必须在我的junit测试中创建一个错误的路径来抛出这个异常,但是我没有得到我想要的结果。我很感谢你的帮助。谢谢。
2条答案
按热度按时间mznpcxlj1#
打电话是没有意义的
Assertions.assertThrows(IOException.class, () -> new BufferedWriter(bw));
测试标准库。事实上你应该打电话Assertions.assertThrows(IOException.class, () -> logger.LogHostStream("logText"));
来测试你自己的方法。你不能得到例外的原因是
() -> new BufferedWriter(bw));
不会抛出任何异常。引发异常的位置是FileWriter fWriter = new FileWriter(logFileName, true);
如果您想测试您的方法以检查它是否抛出excpeted异常,您应该删除try-catch块,如下所示:因为一旦捕捉到异常,就不能用
Assertions.assertThrows
在此之后,您应该更改/config/log/host_logs
在ocomw_config.xml
无效的路径值。那就打电话Assertions.assertThrows(IOException.class, () -> logger.LogHostStream("someLogText"));
,您将看到例外情况。jgzswidk2#
FileWriter
当无法创建或打开文件进行写入时,将引发异常。实现这种情况的一种方法是确保文件应该位于的目录不存在。此测试成功:创建
BufferedWriter
永远不会扔垃圾IOException
,这意味着此Assert将始终失败:你不应该为我写测试
FileWriter
以及BufferedWriter
不过:它们是经过良好测试的标准库类,您可以相信它们按指定的方式工作。