我的项目中有这样的代码:
try {
downloadFile();
unzipFile();
} catch (IOException e) {
System.out.println("Can't download file!");
e.printStackTrace();
}
方法downloadFile()
转发异常IOException
,方法unzipFile()
根本不会抛出任何异常。
现在我正在尝试调试此代码,我的方法downloadFile()
工作正常,所以我想发表评论并查看方法unzipFile()
的工作原理。我们假设文件大小为100 Mb:)
当我使用“downloadFile()
”评论时,我收到此错误:
IOException的无法访问的块。永远不会从try语句主体
抛出此异常
为了调试我的代码,我正在插入像
这样的行if (true) return;
在方法downloadFile()
中,然后将其删除。
我确信我做错了。
能否请您举一个Java大师在这种情况下如何做的例子。
谢谢。
答案 0 :(得分:3)
正如Rob在评论中提到的,测试测试特定的事物/方法/行为。如果你想测试unzipFile
,那么为unzipFile
编写一个可重现的测试用例,不要弄乱任何可能有其自身问题的其他东西(即downloadFile
)。然后,使用已知的输入和输出数据测试unzipFile
。
换句话说,如果你想测试unzipFile
测试那个,而不测试其他所有内容。
除此之外,现在一个简单的解决方案就是这个,我想:
try {
downloadFile();
} catch (IOException e) {
System.out.println("Can't download file!");
e.printStackTrace();
}
unzipFile();
因此您可以轻松注释掉整个try / catch块
答案 1 :(得分:2)
如果您注释掉downloadFile();
,您还应该注释掉try-catch块,因为它不再捕获任何内容。
答案 2 :(得分:1)
如果您确定该方法(unzipFile())不会抛出任何异常,为什么要使用try / catch。
答案 3 :(得分:0)
错误本身表示IOException的所有 “无法访问的块。此异常永远不会从try语句主体 中抛出。
正如您所说,unzipFile()
方法不会抛出任何异常,为什么要用try..catch
包装它?只需删除或评论try..catch()即可运行/调试它。这只是代码中的unzipFile()
而已。如果unzipFile()
取决于downloadFile()
,则可能会导致错误。
答案 4 :(得分:0)
你不应该评论downloadFile()
。该消息告诉你实情:try块中没有代码抛出该异常。
我通常使用带有调试器的IDE来处理这类事情。您可以使用Eclipse或NetBeans;我更喜欢Jet Brains的IntelliJ。
答案 5 :(得分:0)
如果您有合适的工具,通常不需要发表任何评论。例如。你在unzipFile中犯了一个错误你的IDE更喜欢eclipse会向你展示一个堆栈跟踪。如果单击堆栈跟踪中的位置,则会自动获取文件,标记该行时发生错误。
如果可以重现此错误,可以在此行之前设置断点以检查变量和类属性。如果您确定导致问题的块,则可以在此块之前设置断点,依此类推。