码迷,mamicode.com
首页 > 数据库 > 详细

dbunit之org.dbunit.dataset.DataSetException: java.net.MalformedURLException解决方法

时间:2016-04-29 20:12:24      阅读:564      评论:0      收藏:0      [点我收藏+]

标签:

一、问题定位


   在使用dbunit做DAO的单元测试时,抛出了一个org.dbunit.dataset.DataSetException: java.net.MalformedURLException异常,如下图,

技术分享

可以看到问题出现在我写的TestDbUnit的49行,再看源代码

技术分享

第49行是这一句 IDataset ds = new FlatXmlDataSet(file)。但实际出现问题的是file对象中的TestDbUnit.class.getClassLoader().getResourceAsStream("t_user.xml"),

技术分享

我将这一句打印出来发现结果为:

技术分享

结果为null,说明没有读到t_user.xml文件,这也是产生org.dbunit.dataset.DataSetException: java.net.MalformedURLException的原因。


二、解决方法


    问题的根源是t_use.xml文件没有被读取,为什么会产生这种情况能,首先看我t_user.xml文件的位置,

技术分享

t_use.xml文件是在dbunit_xml包下的,而解析它的TestDbUnit类是在zttc.itat.service包下的。


方法一:


    现在我们将t_use.xml文件移动到test根目录下,在运行发现问题解决:

技术分享技术分享技术分享

打印出的TestDbUnit.class.getClassLoader().getResourceAsStream("t_user.xml")也不再为null。


方法二:


    将TestDbUnit.class.getClassLoader().getResourceAsStream("t_user.xml")改为TestDbUnit.class.getResourceAsStream("t_user.xml")然后将t_user.xml移动到与TestDbUnit同一个包下也同样可以解决问题:

技术分享技术分享


方法三:


    如果我就是想把t_user.xml放到dbunit_xml包下读取怎么办,可以用这个语句TestDbUnit.class.getResourceAsStream("/dbunit_xml/t_user.xml"),运行也没有错误

技术分享


三、Class.getResourceAsStream(String path) 与Class.getClassLoader.getResourceAsStream(String path)


    1. Class.getResourceAsStream(String path) : path 不以’/‘开头时默认是从此类所在的包下取资源,以’/‘开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

    2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/‘开头,最终是由ClassLoader获取资源。


dbunit之org.dbunit.dataset.DataSetException: java.net.MalformedURLException解决方法

标签:

原文地址:http://blog.csdn.net/p10010/article/details/51225774

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!