我实现了一个从RSS2.0和Atom 1.0提要中读取的类。为了验证功能,我想编写一些单元测试。下面是我代码的提要读取器部分:
private String readFeed(final String url) throws IOException
{
final StringBuilder builder = new StringBuilder();
final URL feedUrl = new URL(url);
final BufferedReader in = new BufferedReader(
new InputStreamReader(feedUrl.openStream()));
String input;
while ((input = in.readLine()) != null)
{
builder.append(input);
}
in.close();
return builder.toString();
}经过一些研究,我认为最好的测试方法是在我的项目资源目录中将一个示例提要作为XML文件。
我创建了一个示例文件"resources/rss2-0.xml“
我将向readFeed函数发送以下值,“resource ://rss2-0.xml”,并继续接收java.net.MalformedURLException: unknown :resource
这是我第一次使用URL路径从资源加载。据我所知,资源似乎应该是一个有效的协议。有人知道我可能做错了什么或其他方法来做这件事吗?
发布于 2014-08-18 19:17:50
如果要使用本地文件系统处理路径,则路径类最适合此任务。
可用于在文件系统中定位文件的对象。它通常表示系统相关的文件路径。
您可以这样使用它:
Path path = FileSystems.getDefault().getPath("/resources/rss2-0.xml");
BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);如果你真的想要处理URL,你要寻找的协议就是“文件”。确切地说,这将是file:///rss2-0.xml,而不是resource:///rss2-0.xml,甚至file:/resources/rss2-0.xml。
请注意,在您的情况下,您迟早要处理URL,但是在处理本地测试时,使用Path类可以省去麻烦。如果您想要另一种选择,请尝试URI类。由于URI是一个标识符(请参阅URI和URL的区别),它可以识别URL或路径,它可以充当生产代码(最终将处理URL)与测试代码之间的桥梁,在这两者之间可以最好地使用Path类。
例如:
public interface FeedReader {
String readFeed(final URI uri);
}以及两个实现,一个用于本地测试:
public class LocalFeedReader implements FeedReader {
@Override
public String readFeed(final URI uri) {
// URI -> Path
// then dealing with Path to target local rss2-0.xml file
}
}一份用于生产代码:
public class WebFeedReader implements FeedReader {
@Override
public String readFeed(final URI uri) {
// URI -> URL
// then dealing with URL to target real resources
}
}发布于 2014-08-18 19:25:30
java文档说只有http、https、file和jar才能“保证”存在于协议处理程序的搜索路径上。其他只有“可能”才能得到支持。
http://docs.oracle.com/javase/8/docs/api/java/net/URL.html#URL-java.lang.String-java.lang.String-int-java.lang.String-
看起来,如果您想要java发行版中不支持的自定义处理程序,则必须创建一个处理程序。
http://mjremijan.blogspot.com/2012/02/create-your-own-java-url-handlers.html
https://stackoverflow.com/questions/25370483
复制相似问题