java – 抛出UncheckedIOException而不是其他预期的异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 抛出UncheckedIOException而不是其他预期的异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1674字,纯文字阅读大概需要3分钟。
内容图文
虽然重构Rultor使用Cactoos而不是Guava,但我遇到了GithubProfileTest和GithubProfileValidationTest的否定测试问题.
在重构之后,正测试用例通过了两个提到的测试类,但是期望特定异常的否定测试用例失败.
受测试的重构代码是GithubProfile.assets方法和GithubProfile.asset方法.
我重构的资产方法看起来像这样:
public Map<String, InputStream> assets() throws IOException {
final XML xml = this.read();
final List<XML> nodes = xml.nodes("/p/entry[@key='assets']/entry");
return new MapOf<>(
new Mapped<>(
nodes,
input ->
new MapEntry<>(
input.xpath("@key").get(0),
this.asset(input.xpath("text()").get(0))
)
)
);
}
在不同的测试用例中,this.asset调用应该抛出Profile.ConfigException.相反,在调用assets方法时,测试失败,并且无法评估表达式方法抛出’java.io.UncheckedIOException’异常,并且简单地忽略/隐藏Profile.ConfigException.
似乎MapOf以某种方式无法评估或“隐藏”对this.asset方法的调用引发的异常,引发自身的UncheckedIOException,因此我无法修复此问题并引发了Profile.ConfigException.
在调试时,UncheckedIOException不包含任何引发Profile.ConfigException的信息.
有关为什么我可能会获得此行为或可能的解决方案的任何提示?
解决方法:
问题是Iterable#next()(在JDK中)不允许抛出已检查的异常(如Profile.ConfigException).这就是org.cactoos.iterator.Mapped捕获它们并抛出UncheckedIOException的原因.由于JDK设计,它是不可修复的.你能做的最好的就是循环好老:
public Map<String, InputStream> assets() throws IOException {
final XML xml = this.read();
final List<XML> nodes = xml.nodes("/p/entry[@key='assets']/entry");
final List<MapEntry> entries = new LinkedList<>();
for (final XML node : nodes) {
entries.add(
new MapEntry<>(
input.xpath("@key").get(0),
this.asset(input.xpath("text()").get(0)) // checked exeption here
)
);
}
return new MapOf<>(entries);
}
内容总结
以上是互联网集市为您收集整理的java – 抛出UncheckedIOException而不是其他预期的异常全部内容,希望文章能够帮你解决java – 抛出UncheckedIOException而不是其他预期的异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。