我已经实现了一个类来读取RSS 2.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:未知协议:资源
这是我第一次使用URL路径从资源加载。据我所知,资源似乎应该是一个有效的协议。任何人都有任何想法,我可能做错了什么或其他方式来解决这个问题?
答案 0 :(得分:2)
如果要使用本地文件系统处理路径,Path类最适合此任务。
可用于在文件系统中查找文件的对象。它会 通常表示系统相关的文件路径。
您可以像这样使用它:
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
都是准确的。
请注意,在您的情况下,您确实必须迟早处理URLs,但在进行本地测试时,使用Path类将为您节省麻烦。如果您想要其他选择,请尝试URI课程。由于URI是标识符(请参阅difference between URI and URL),因此它可以标识URL或路径,可以作为最终处理URL和测试代码的生产代码之间的桥梁。可以最好地使用Path类。
例如:
public interface FeedReader {
String readFeed(final URI uri);
}
有2个实现,一个用于本地测试:
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
}
}
答案 1 :(得分:1)
java文档说协议处理程序的搜索路径上只保留http,https,文件和jar。其他人只能“支持”。
如果您想要一个java发行版不支持的自定义处理程序,您将不得不创建一个。
http://mjremijan.blogspot.com/2012/02/create-your-own-java-url-handlers.html