4 回答
TA贡献1853条经验 获得超18个赞
您不能期望您的断言框架能够捕获在您的 SUT 中捕获的异常:
catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }
你要么必须:
记录然后重新抛出相同/不同的异常并断言。
使您的方法返回布尔值作为成功等价物,然后您可以对其进行断言。
TA贡献1875条经验 获得超5个赞
你抓住了FileNotFoundException
内部readData
。
尝试重构,这样你就没有 try-catch,并且有public void readData(String COMMA_DELIMITER, String READ_FILE_PATH) throws IOException { ...
(FileNotFoundException
是的子类IOException
。)
TA贡献1816条经验 获得超4个赞
assertThrows(Class<T> expectedType, Executable executable)
不会断言在您的代码中一次抛出异常(在您的情况下是这样)。但这断言在 lambda 中调用的语句Executable
抛出异常(在您的情况下为 false)。
FileNotFoundException
由于您在被测方法中 捕获了异常,异常永远不会传播到 lambda 返回,JUnit 只能发出错误,因为没有遇到预期的异常。
要断言这样的事情,不要通过删除语句来捕获异常catch
,而不是throws
FileNotFoundException
在测试方法的声明中声明:
public void readData(String COMMA_DELIMITER, String READ_FILE_PATH) throw FileNotFoundException {...}
TA贡献1848条经验 获得超6个赞
您的方法不会抛出FileNotFoundException:您捕获它,打印堆栈跟踪,然后继续进行,就好像没有发生异常一样:
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JUnit 并不神奇:它无法检测方法内部发生的事情,除了检测副作用(返回的值、未捕获的异常、变异状态)。
添加回答
举报